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>
Надеюсь, это поможет.