Каков оптимальный способ удаления субдомена www с URL-адреса с использованием перезаписи URL-адреса IIS?
Правильный метод удаления www из адреса с использованием перезаписи URL-адреса IIS
Ответ 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>