Как настроить правило перезаписи IIS с определенным шаблоном? - PullRequest
1 голос
/ 21 мая 2019

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

Например, я хочу, чтобы они соответствовали:

http://www.foo.com/mn  
http://www.foodev.com/mn  
http://www.foo.com/MN  
http://www.foodev.com/MN  

Но это не получится:

http://www.foo.com/la/mn  
http://www.foo.com/la/di/da/mn  
http://www.foodev.com/la/mn  
http://www.foodev.com/la/di/da/mn

Я установил следующее правило:

    <rule name="Redirect MN" enabled="true" stopProcessing="true">
      <match url="(.*)" ignoreCase="true"  />
    <conditions>
        <add input="{PATH_INFO}" pattern="/\/mn$/gmi" />
     </conditions>        
      <action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
    </rule> 

Где я использую значение {PATH_INFO} с шаблоном /\/mn$/gmi, который, похоже, должен совпадать: https://regex101.com/r/ql2USW/1/

Когда я просматриваю событие в средстве просмотра FREBUI, я вижу расширенный ввод и шаблон (которые кажутся правильными), но это не удается.

Input {PATH_INFO} 
ExpandedInput /MN 
MatchType Pattern 
Pattern /\/mn$/gmi 
Negate false 
Succeeded false 

Как мне изменить конфигурацию этого правила?

Screenshot of the FREBUI

Microsoft-IIS / 10,0

Ответы [ 2 ]

1 голос
/ 22 мая 2019

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

Теперь правило соответствует и даже игнорирует регистр, что я и хотел.Я не понимаю, почему это работает, поскольку шаблон должен соответствовать только нижнему регистру.Возможно, условия наследуют атрибут ignoreCase правила, к которому он применяется?Я новичок в работе с модулем перезаписи URL, так что, возможно, кто-то еще знает, как все это работает.

    <rule name="Redirect MN" enabled="true" stopProcessing="true">
      <match url="(.*)" ignoreCase="true"  />
    <conditions>
        <add input="{PATH_INFO}" pattern="(\/mn$)" />
     </conditions>        
      <action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
    </rule> 
1 голос
/ 21 мая 2019

Может быть, мы могли бы решить эту проблему. Давайте начнем с простого выражения для передачи желаемых URL-адресов и отказа от нежелательных. Позже, если мы хотим, мы можем ограничить его дополнительными границами.

Здесь это выражение, скорее всего, будет соответствовать желаемым URL-адресам, просто удалив $ char:

\.com\/mn

И я надеюсь, что проблема может быть решена здесь.

Демо

Хотя мы могли бы продолжить добавление границ, например, слева от .com:

.+\.com\/mn

Демо

Или аналогично вашей исходной версии, мы можем добавить начальную и конечную границы:

^.+\.com\/mn$

Демо

Тогда наша установка может выглядеть так:

<rule name="Redirect MN" enabled="true" stopProcessing="true">
    <match url="(.*)" ignoreCase="true"  />
    <conditions>
        <add input="{PATH_INFO}" pattern="\.com\/mn/gmi" />
    </conditions>        
    <action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
</rule> 

Или любой другой шаблон, который мы хотим изменить, скорее всего, будет здесь:

pattern="\.com\/mn/gmi"

enter image description here

RegEx

Если это выражение нежелательно, его можно изменить или изменить в regex101.com .

RegEx Circuit

jex.im также помогает визуализировать выражения.

enter image description here

...