本文记录了在ASP.NET MVC项目中,如何通过配置文件,实现将带www的二级域名301重定向到顶级域名的方法。通过web.config配置文件的设置,可以解决虚拟机无法直接设置IIS的问题。不过需要注意的是,虚拟机上必须要安装URL重写工具,否则就无法实现重定向功能,不过一般服务器商都是会安装的。
这里建议先看下这3篇文章和资料,了解下IIS的URL重写工具模块的相关信息,这样有助于我们理解在配置文件中设置重写的属性节点:
- IIS8如何安装和使用URL重写工具-URL Rewrite
- URL Rewrite Module Configuration
- IIS URL 重写模块
首先看下我的ASP.NET MVC项目中的web.config配置:
<rewrite>
<rules>
<rule name="www重写" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="^www.shiyousan.com$" />
</conditions>
<action type="Redirect" url="https://shiyousan.com/{R:0}" />
</rule>
</rules>
</rewrite>
<rule>节点主要设置规则名称,和匹配规则的模式语法,默认是使用正则表达式匹配,如果需要设置其他语法,则要设置patternSyntax属性,一共有三个值:ECMAScript(正则表达式),Wildcard(通配符),ExactMatch(完全匹配)
<match url=".*" />节点是规则模式,主要用于匹配请求的URL,这里的url就是要使用正则表达式来进行匹配,只有所请求的URL的路径符合匹配,后面的规则才有效果。具体可以看这篇文章:详解IIS中URL重写工具的匹配URL-规则模式(rule patterns)
<conditions>节点是规则条件,主要用于过滤URL中的主机/参数/端口等部分,由于我们是要将www.shiyousan.com跳转到顶级域名shiyousan.com,所以这里input属性设置为{HTTP_HOST} (表示匹配主机的服务器变量),匹配模式的语法属性pattern为"^www.shiyousan.com$。具体可以看这篇文章:详解IIS中URL重写工具的规则条件(Rule conditions)
最后是<action>节点,这个节点主要是设置要进行的操作,type属性一共有三个,None(无),Rewrite(重写),Redirect(重定向),CustomResponse(自定义响应),AbortRequest(终止请求),由于我们要做301重定向,所以设置的type="Redirect",并且设置要重定向的URL为:https://shiyousan.com/{R:0}。 另外关于{R:0},其实是属于正则的反向引用的语法,可以参考这篇文章:详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}。
另外可以参考与本文相关的一篇文章:ASP.NET 301跳转或者进行301重定向/转向的方法
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98676.html