Многокомпонентный RegEx в IIS 7 URL Rewriter для внешних ссылок - PullRequest
1 голос
/ 07 марта 2011

Я пытался заставить механизм перезаписи URL IIS работать для определенного случая исходящих URL.Я пытаюсь сделать строчными все URL-адреса, кроме тех, которые соответствуют этим критериям:

  • Исходящая ссылка с хэш-тегом: page.aspx # q = MixedCaseParameter
  • Уже переписанный дружественный исходящий URL-адрес с идентификатором продукта со смешанным регистром и описанием продукта: / shopping / product / A12345 / Mixed-Case-Product-Description
  • Исходящая ссылка с JavaScript: inHREF вместо URL: javascript: __ doPostBack ('control', 'action')

Я могу выполнять его части, но не все в одном выражении,но я не могу получить все три.Вот что у меня сейчас есть:

([A-Z]+)((?:(?!app\.aspx#q).)|(?:^(?!javascript:).))

И настройки в web.config:

<rewrite>
  <!-- other rules excluded for clarity -->
  <outboundRules rewriteBeforeCache="true">

    <rule name="Outbound lowercase" preCondition="IsHTML" enabled="true">
      <match filterByTags="A" pattern="([A-Z]+)((?:(?!app\.aspx#q).)|(?:^(?!javascript:).))" ignoreCase="false" />
      <action type="Rewrite" value="{ToLower:{R:0}}" />
    </rule>

    <!-- Example friendly outbound rewrite rule -->
    <rule name="Rewrite Product Outbound" preCondition="IsHTML" enabled="true" stopProcessing="true">
      <match filterByTags="A" pattern="product\.aspx\?cat=catalogname&amp;amp;pid=([0-9a-zA-Z\-]+)&amp;amp;pdisplayname=([0-9a-zA-Z\-]+)" ignoreCase="true" />
      <action type="Rewrite" value="/shopping/product/{R:1}/{R:2}" />
    </rule>

    <preConditions>
      <preCondition name="IsHTML" logicalGrouping="MatchAny">
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
      </preCondition>
    </preConditions>
    <!-- Shopping Outbound Rules End -->
  </outboundRules>
</rewrite>

Спасибо.

1 Ответ

1 голос
/ 31 марта 2011

Вот регулярное выражение, которое будет соответствовать трем типам исходящих URL, которые вы не хотите использовать в нижнем регистре:

.*?page\.aspx#q|.*?/shopping/product|^javascript:

Тест:

page.aspx#q=MixedCaseParameter                              => Matched
/shopping/product/A12345/Mixed-Case-Product-Description     => Matched
javascript:__doPostBack('control','action')                 => Matched 
http://google.com                                           => NOT Matched
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...