Правило перезаписи URL IIS не работает для всего сайта - PullRequest
0 голосов
/ 08 октября 2018

Моя цель - перенаправить следующие URL-адреса на новый сайт (необходимо точное соответствие, поскольку у меня есть другие правила для oldsite.com/test.aspx):

  • oldsite.com
  • oldsite.com /
  • www.oldsite.com
  • www.oldsite.com /
  • Только сверху (статически) я не делаюхочу переслать oldsite.com/test.aspx, например

Я использовал следующее:

<rule name="Redirect" stopProcessing="true">
                    <match url="oldsite.com$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{HTTP_HOST}" pattern="oldsite.com" />
                        <add input="{HTTP_HOST}" pattern="www.oldsite.com" />
                        <add input="{HTTP_HOST}" pattern="oldsite.com/" />
                        <add input="{HTTP_HOST}" pattern="www.oldsite.com/" />
                    </conditions>
                    <action type="Redirect" url="http://newsite.com" appendQueryString="false" />
                </rule>

Мое правило не работает, и мне было интересно, почему

1 Ответ

0 голосов
/ 09 октября 2018

HTTP-заголовок хоста никогда не содержит /, поэтому ваши {HTTP_HOST} условия, заканчивающиеся /, являются избыточными.

<match url="oldsite.com$", с другой стороны, просто означает, что они соответствуют только путям (неURL), заканчивающиеся oldsite.com.

например:

  • http://whatever/something-oldsite.com совпадений.
  • http://whatever/oldsite.com совпадений.
  • http://whatever/oldsite.comAне совпадает.
  • http://whatever/oldsite.co не совпадает.

Видимо, это не то, что вы хотите.

Кроме того, имейте в виду, что буквальный символ точки (.) означает «совпадать с любым символом» в регулярных выражениях.Это неожиданно заставляет ваш шаблон совпадать с URL-адресом, например http://whatever/oldsiteZcom.Не забывайте избегать точек с обратными слешами в шаблонах, когда вы ищете буквальные точки.

Атрибут url элемента <match> здесь немного двусмысленный, мне всегда интересно, почему Microsoft выбирает это имя, что-товроде бы <match path=".. было бы понятнее, но это то, что мы имеем с модулем перезаписи URL.Я понимаю ваше замешательство, я был там.

В любом случае, вы ищете точные пустые пути, поэтому вам нужно правило, как показано ниже.

<rule name="Redirect" stopProcessing="true">
    <match url="^$" ignoreCase="false" /> <!-- path is empty, just starts (^) and ends ($), does not contain anything -->
    <conditions>
        <add input="{HTTP_HOST}" pattern="^oldsite\.com$" /> <!-- host name literally equals to oldsite.com -->
        <add input="{HTTP_HOST}" pattern="^www\.oldsite\.com$" /> <!-- host name literally equals to www.oldsite.com -->
    </conditions>
    <action type="Redirect" url="http://newsite.com" appendQueryString="false" />
</rule>

Надеюсь, это поможет.

...