Надежный метод для удаления www из адреса с использованием IIS URL Rewrite

Какой оптимальный способ удалить WWW поддомен от URL с помощью Rewrite IIS URL?

25
задан Chris Marisic 10 September 2011 в 00:03
поделиться

4 ответа

Если вы хотите, чтобы оно работало с любым именем хоста (без жесткого кодирования в правиле), вам нужно сделать что-то вроде этого:

<rule name="Remove www" stopProcessing="true">
  <match url="(.*)" ignoreCase="true" />
  <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_HOST}" pattern="^www\.(.+)$" />
  </conditions>
  <action type="Redirect" url="http://{C:1}/{R:0}" appendQueryString="true" redirectType="Permanent" />
</rule>

в действии перенаправления, {C: 1 } содержит вторую группу захвата в условии, тогда как {R: 0} содержит все, что было в правиле (путь). appendQueryString = "true" также добавит любую строку запроса к перенаправлению (если имеется). Имейте в виду, что любые хэши URL, если они есть, будут потеряны в процессе, поскольку они не будут переданы на сервер.

36
ответ дан 28 November 2019 в 21:00
поделиться

IIS делает это автоматически для вас:

Выберите сайт> Перезапись URL> Новое правило> Каноническое имя хоста:)

6
ответ дан 28 November 2019 в 21:00
поделиться

Должно работать следующее:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Remove WWW" stopProcessing="true">
        <match url="^(.*)$" />
        <conditions>
          <add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" />
        </conditions>
        <action type="Redirect" url="http://www.example.com{PATH_INFO}" redirectType="Permanent" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>
5
ответ дан 28 November 2019 в 21:00
поделиться

Для перенаправления, которое будет работать как для http, так и для https, можно использовать следующее

    <rewrite>
        <rules>
            <rule name="Lose the www" enabled="true" stopProcessing="true">
                <match url="(.*)" ignoreCase="true"/>
                <conditions logicalGrouping="MatchAll">
                    <add input="{HTTP_HOST}" pattern="^www\.(.*)$"/>                    
                </conditions>
                <action type="Redirect" redirectType="Permanent" url="{SchemeMap:{HTTPS}}://{C:1}/{R:1}" appendQueryString="true" />
            </rule>
        </rules>
        <rewriteMaps>
            <rewriteMap name="SchemeMap">
                <add key="on" value="https" />
                <add key="off" value="http" />
            </rewriteMap>
        </rewriteMaps>
    </rewrite>
-1
ответ дан 28 November 2019 в 21:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: