IIS7 URL Rerwrite - как заменить все подчеркивания дефисами в регулярном выражении?

Я использую функцию перезаписи URL-адреса в IIS7, чтобы изменить URL-адрес:

/main.asp?category=Name_Of_A_Product

В:

/category/name-of-a-product/

Я создал правила перенаправления и перезаписи ниже, которые выполняют большую часть работы, за исключением того, что я не могу найти способ заменить символы подчеркивания дефисами.

Каждый URL-адрес может иметь от нуля до множества символов подчеркивания, и я пытаюсь заменить их одним регулярным выражением, чтобы избежать цепочек переадресации 301 (поскольку я считаю, что это плохо для SEO).

Вы знаете, как (или если) это можно сделать?

<rule name="Redirect REAL to FRIEDNLY" enabled="true" stopProcessing="true">
    <match url="^main\.asp$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
        <add input="{QUERY_STRING}" pattern="^category=([^=&amp;]+)($|&amp;(.*))$" />
     </conditions>
    <action type="Redirect" url="category/{ToLower:{C:1}}/" appendQueryString="false" />
</rule>

<rule name="Rewrite FRIEDNLY to REAL" stopProcessing="false">
    <match url="^category/([^/]+)/?$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="main.asp?category={R:1}" />
</rule>

person Brain101    schedule 16.05.2012    source источник
comment
Проверьте этот вопрос.   -  person Stephan    schedule 24.09.2012


Ответы (1)


К сожалению, у IIS7 есть несколько ограничений:

  • вы можете захватывать только 9 групп C:1 ... C:9
  • есть только одна строковая функция, и это ToLower

Из-за этого вы будете ограничены URL-адресом максимум из 9 слов, разделенных максимумом 8 символов подчеркивания (например, /main.asp?category=One_Two_Three_Four_Five_Six_Seven_Eight_Nine), и вы будете вынуждены использовать 9 правил перезаписи:

Одно слово: /main.asp?category=Product

<rule name="Redirect REAL to FRIEDNLY 1" enabled="true" stopProcessing="true">
<match url="^main\.asp$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
    <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)$" />
 </conditions>
<action type="Redirect" url="category/{ToLower:{C:1}}/" appendQueryString="false" />
</rule>

Два слова: /main.asp?category=Some_Product

<rule name="Redirect REAL to FRIEDNLY 2" enabled="true" stopProcessing="true">
<match url="^main\.asp$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
    <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)_([A-Za-z]+)$" />
 </conditions>
<action type="Redirect" url="category/{ToLower:{C:1}}-{ToLower:{C:2}}/" appendQueryString="false" />
</rule>

Три слова: /main.asp?category=Some_New_Product

<rule name="Redirect REAL to FRIEDNLY 3" enabled="true" stopProcessing="true">
<match url="^main\.asp$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
    <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)_([A-Za-z]+)_([A-Za-z]+)$" />
 </conditions>
<action type="Redirect" url="category/{ToLower:{C:1}}-{ToLower:{C:2}}-{ToLower:{C:3}}/" appendQueryString="false" />
</rule>

            ...            ...            ...            ...            ...            ...

person CSᵠ    schedule 07.03.2013