Я прочитал 30 лучших результатов Google для нескольких комбинаций IIS rewrite map condition
и так далее, но я не могу найти подходящей документации ни на сайте microsoft.com, ни где-либо еще.
У меня есть куча карт перезаписи в IIS7, которые я хотел бы обработать независимо от того, следует ли за ними косая черта. Таким образом, www.foo.com/bar
и www.foo.com/bar/
должны соответствовать правилу.
<rewrite>
<rewriteMaps>
<rewriteMap name="ShortURLs">
<add key="/terms" value="/en-us/terms-and-conditions/"/>
<add key="/privacy" value="/en-us/privacy-and-cookies/"/>
<add key="/buy" value="/en-us/where-to-buy/"/>
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Short URL redirects">
<match url="^/?(.+)/?$" />
<conditions>
<add input="{ShortURLs:{REQUEST_URI}}" pattern="(.+)"/>
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="true"/>
</rule>
</rules>
</rewrite>
Теперь это работает отлично, за исключением того, что единственный способ, которым я могу найти соответствие /terms/
первому ключу в карте перезаписи, — это дублировать карту, чтобы она читалась:
<rewriteMap name="ShortURLs">
<add key="/terms" value="/en-us/terms-and-conditions/"/>
<add key="/privacy" value="/en-us/privacy-and-cookies/"/>
<add key="/buy" value="/en-us/where-to-buy/"/>
<add key="/terms/" value="/en-us/terms-and-conditions/"/>
<add key="/privacy/" value="/en-us/privacy-and-cookies/"/>
<add key="/buy/" value="/en-us/where-to-buy/"/>
</rewriteMap>
Это кажется смехотворно неэлегантным, учитывая, что я использую регулярные выражения для их сопоставления. Добавление /?
к вводу условия или шаблону условия, похоже, не работает.
Я видел ответ на Перезапись IIS7 Map Regex?, в котором упоминаются регулярные выражения, использовать нельзя (цитата из Использование карт перезаписи в модуле перезаписи URL), но, как я там прокомментировал, это, похоже, относится к конкретным примерам, приведенным перед этим текстом, а не к массовому «это никогда не сработает».
Что мне не хватает? Должны быть какие-то средства для этого; я пропустил что-то очевидное?