Какой оптимальный способ удалить WWW поддомен от URL с помощью Rewrite IIS URL?
Если вы хотите, чтобы оно работало с любым именем хоста (без жесткого кодирования в правиле), вам нужно сделать что-то вроде этого:
<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, если они есть, будут потеряны в процессе, поскольку они не будут переданы на сервер.
IIS делает это автоматически для вас:
Выберите сайт> Перезапись URL> Новое правило> Каноническое имя хоста:)
Должно работать следующее:
<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>
Для перенаправления, которое будет работать как для 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>