Правило перезаписи 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-адрес соответствия и добавить условия, но не могу заставить его работать. Спасибо.


person James Barry    schedule 04.03.2014    source источник


Ответы (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>
person James Barry    schedule 05.03.2014
comment
почему вы используете ^ url1 $ в своем узле сопоставления? Или это должно быть заменено тем, что OP указал как example.com/url1? Будет ли это иметь смысл - не лучше ли сопоставить все URL-адреса, например. *? PS. Остальное из того, что вы сказали, сработало для меня. - person Jacques; 27.06.2017
comment
Я хотел, чтобы domain.com/subdir1 перенаправлял на domain.com/subdir2, но веб-сайт прослушивал несколько доменов. Я не хотел, чтобы это правило перенаправляло другие домены. url1 будет заменен начальным сегментом (подкаталогом), который вы хотите перенаправить. Условие было для конкретного домена. И у акции был тот же домен и новый сегмент. - person James Barry; 27.06.2017

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

<!-- 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" />
person sugardaddy    schedule 19.11.2014