使用 IIS URL 重写从地址中删除 www 的正确方法
Posted
技术标签:
【中文标题】使用 IIS URL 重写从地址中删除 www 的正确方法【英文标题】:Proper method to remove www from address using IIS URL Rewrite 【发布时间】:2022-03-04 19:26:54 【问题描述】:使用 IIS URL 重写从 url 中删除 www 子域的最佳方法是什么?
【问题讨论】:
【参考方案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 哈希(如果存在)都将在此过程中丢失,因为这些哈希不会传递给服务器。
【讨论】:
我从来没有对第一个答案中的硬编码片段感到兴奋,很高兴我终于可以在这个问题上标记答案。 如果有人进入 https 怎么办?您不想只是自动将它们重定向到 http,是吗? 也许您可以将http://
替换为//
,它会按照您想要的方式工作。
@mrjedmao 不,您不能使用协议相对 url 作为基本 url。重写将重写请求,而不是标记。当浏览器在标记中看到 href="//google.com" 时,它会查看基本 url(地址栏中的那个)并使用相同的协议。请求本身将分别包含 http:// 或 https:// 。尝试在浏览器中输入 //google.com。您也可以使用 IIS Rewrite 修改标记,但这需要输出重写规则。
Mads Kristensen 有一个很好的配置示例,它也与协议无关(支持 HTTPS):madskristensen.net/post/url-rewrite-and-the-www-subdomain【参考方案2】:
IIS 会自动为您完成:
选择站点> URL重写>新规则>规范主机名:)
【讨论】:
肯定是最佳答案。【参考方案3】:以下一个应该可以工作:
<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.comPATH_INFO" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
【讨论】:
你有 www 在行动吗?【参考方案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>
【讨论】:
以上是关于使用 IIS URL 重写从地址中删除 www 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章