2013-11-28 5 views
0

У меня есть Rewrite IIS правило, чтобы преобразовать все URL, в нижний регистрIIS Rewrite Rule для нижнего регистра URL,

<rewrite> 
    <rules> 
     <rule name="LowerCaseRule1" stopProcessing="true"> 
      <match url="[A-Z]" ignoreCase="false" /> 
      <action type="Redirect" url="{ToLower:{URL}}" /> 
     </rule> 
    </rules> 
</rewrite> 

Однако это только преобразует часть URL в нижнем регистре и не преобразует querystrings. Например, ID не скроен на id

http://www.itsmysitesitesite.com/showproduct.aspx?ID=230 

Как изменить приведенное выше правило так, чтобы включить строки запроса?

+0

хотя это может и не быть проблемой, разве вы не должны быть осторожны? Вы на 100% уверены, что дело никогда не важно в ваших ответах? –

+0

После небольшого поиска этого http://stackoverflow.com/questions/20018553/url-rewrite-to-change-querystring-case может помочь вам? – Damon

+0

@Bartdude важно? Можете ли вы уточнить. – CuriousDev

ответ

0

Основываясь на мой комментарий (ссылки this вопрос) я бы себе правило будет выглядеть примерно так:

<rule name="URL Lower" enabled="true" stopProcessing="true"> 
     <match url="[A-Z]" ignoreCase="false" />       
     <conditions trackAllCaptures="true"> 
      <add input="{QUERY_STRING}" pattern="(.*)" /> 
      <add input="{QUERY_STRING}" pattern="([A-Z]+)" ignoreCase="false" /> 
     </conditions> 
     <action type="Redirect" url="{ToLower:{URL}}{ToLower:{C:1}}" appendQueryString="false" /> 
</rule> 

Правовая оговорка, хотя, я работаю на Windows XP, так что я получил только IIS 6.0 , поэтому я не могу проверить правильность синтаксиса! Может потребоваться небольшая настройка ...

+0

спасибо за помощь – CuriousDev

0

Я не смог сделать одно правило, которое бы захватило и {URL}, и {QUERY_STRING}, а также отобразило URL-адрес так, как я этого хотел. Итак, я разделил его на два правила.

URL в строчные

<rule name="UrlToLowercase" stopProcessing="true"> 
    <match url=".*[A-Z].*" ignoreCase="false" /> 
    <conditions>       
     <add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" /> 
     <add input="{URL}" pattern="^.*\.(axd|css|js|jpg|jpeg|png|gif|txt|xml|svg|pdf)$" negate="true" ignoreCase="true" /> 
    </conditions> 
    <action type="Redirect" redirectType="Permanent" url="{ToLower:{URL}}" /> 
</rule> 

URL с Строка запроса в строчные

<rule name="UrlWithQueryStringToLowercase" stopProcessing="true"> 
    <match url="(.*)" ignoreCase="false" /> 
    <conditions trackAllCaptures="true"> 
     <add input="{QUERY_STRING}" pattern="(.*)" /> 
     <add input="{QUERY_STRING}" pattern=".*[A-Z].*" ignoreCase="false" /> 
     <add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" /> 
    </conditions> 
    <action type="Redirect" redirectType="Permanent" url="{ToLower:{URL}}?{ToLower:{C:0}}" appendQueryString="false" /> 
</rule> 

Это должно охватывать каждый случай, и если это не так, пожалуйста, дайте мне знать. :)

Я добавил некоторые дополнительные условия, которые вы можете захотеть оставить или вывезти.

<add input="{URL}" pattern="^.*\.(axd|css|js|jpg|jpeg|png|gif|txt|xml|svg|pdf)$" negate="true" ignoreCase="true" /> игнорирует пути, которые заканчиваются на axd, css, js, jpg, ... и т. Д. Без этого правила вы не сможете загрузить файл с прописными буквами с вашего сервера.

<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" /> проигнорирует запросы методом POST. Без этого правила POST, указывающие заглавные URL-адреса, потеряют данные из-за 301 (у GET нет этой проблемы).