2012-03-12 2 views
1

У меня есть правила перезаписи в моем файле web.config, как это:Проверьте первый сегмент URL не файла или каталога

<rule name="Public page" stopProcessing="true"> 
     <match url="^([^/]+)/([^/]+)/?$" /> 
     <conditions> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
      <add input="{URL}" pattern="\.(.*)$" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="public/place/{R:2}.aspx?cname={R:1}" /> 
    </rule> 

Что она делает это позволить тип клиента в динамическом топонима, а затем страницу, которую он хочет видеть. например, у меня есть страница, которая отображает новости для компаний. Я хочу посмотреть новости для компании под названием «Павильон», так что я типа:

http://localhost/pavilion/news/ 

и переписывание URL берет меня

http://localhost/public/news.aspx?cname=pavilion 

Это работает. Но я получаю много ошибок о странице, которая не найдена для такого случая: атрибут src изображения, который указывает на какое-то не существующее имя с другой страницы. например, в странице продуктов (Http: //localhost/products/showproducts.aspx) У меня есть:

<img src='undefined'/> 

, когда я отладки я вижу, что это срабатывает правило, полагая, что продукты является {R: 2} и неопределенный является {R: 1} поэтому он пытается загрузить http://localhost/products/undefined/ и я получаю ошибку: The file '/public/undefined.aspx' does not exist.

Я хотел бы правил не стрелять, если первый сегмент URL является каталог или файл. Есть ли у кого-нибудь идеи, как я могу сделать такую ​​проверку?

ответ

0

Ответ заключается в использовании обратной ссылки в строке ввода условия.

<rule name="Public page" stopProcessing="true"> 
       <match url="^([^/]+)/([^/]+)/?$" /> 
       <conditions> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
        <add input="{URL}" pattern="\.(.*)$" negate="true" /> 
        <add input="{DOCUMENT_ROOT}\{R:1}" matchType="IsFile" negate="true" /> 
        <add input="{DOCUMENT_ROOT}\{R:1}" matchType="IsDirectory" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="public/place/{R:2}.aspx?cname={R:1}" /> 
      </rule> 

Благодаря Leo для ответа