Подтвердить что ты не робот

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

Каков оптимальный способ удаления субдомена www с URL-адреса с использованием перезаписи URL-адреса IIS?

4b9b3361

Ответ 1

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

<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, если они присутствуют, будут потеряны в процессе, поскольку они не передаются на сервер.

Ответ 2

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

<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>

Ответ 3

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

Выберите сайт > Переписать URL > новое правило > Имя Canonical Host:)

Ответ 4

Чтобы сделать перенаправление, которое будет работать как для 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>