Правило перезаписи IIS для перенаправления определенного URL домена на другой URL в одном домене

Я просто хочу, чтобы правило перезаписи IIS 7.5 перенаправляло http://www.domain.com/url1 на http://www.domain.com/url2 (тот же домен). Это может быть достигнуто путем:

<rule name="Redirect url" enabled="true" stopProcessing="true">
    <match url="^url1" />
    <action type="Redirect" url="http://www.domain.com/url2"
      appendQueryString="false" redirectType="Permanent" />
</rule>

Тем не менее, этот веб-сайт прослушивает несколько доменов, поэтому вышеуказанное становится глобальным правилом для всех доменов. Как мне сделать это специально для domain.com? Попытался изменить URL соответствия и добавить условия, но не смог заставить его работать. Благодарю.

2 ответа

Решение

Я получил это работать так:

<rule name="Redirect url1" stopProcessing="true">
     <match url="^url1$" />
     <conditions>
          <add input="{HTTP_HOST}" pattern="^(www.)?domain.com$" />
     </conditions>
     <action type="Redirect" url="http://www.domain.com/url2"
      appendQueryString="false" redirectType="Permanent" />
</rule>

Используя ответ на этой странице, я смог настроить правило для себя. Я также добавил параметры запроса. Хотел опубликовать здесь, на случай, если это кому-нибудь поможет:

<!-- probably requires custom rewrite module, available through web platform installer -->
<rule name="Redirect oldsite.com" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^.*oldsite\.com$" />
    </conditions>
    <action type="Redirect" url="http://www.newsite.com/page.cfm?userid=123&amp;mode=form"
      appendQueryString="false" redirectType="Permanent" />
</rule>

Несколько битов объяснения:

Чтобы устранить некоторую путаницу, этот "URL-адрес" - это часть после первого слэша после домена, а не весь URL-адрес. Я собираюсь вставить это, чтобы он получил любой URL.

<match url=".*" />

Теперь мы добавим условие, потому что у меня было несколько веб-сайтов на этом компьютере, поэтому я хочу убедиться, что это правило применяется только к одному из них. Я также использовал подстановочный знак вместо "(www.)?" потому что подстановочный знак будет ловить любой поддомен.

<conditions>
    <add input="{HTTP_HOST}" pattern="^.*oldsite\.com$" />
</conditions>

И последнее замечание для людей, которые хотят добавить несколько параметров строки запроса. Вам нужно будет экранировать амперсанд между ними, потому что если вы этого не сделаете, это не сработает:

<action type="Redirect" url="http://www.newsite.com/page.cfm?userid=123&amp;mode=form"
  appendQueryString="false" redirectType="Permanent" />
Другие вопросы по тегам