如何在ASP.NET MVC 5中编写规则将所有用户URL重定向到指定有效URL
ASP.NET MVC5 统一域名重定向实现方案
原配置的问题
- 硬编码端口
:4005,导致非该端口的请求无法触发规则 - 仅处理HTTP转HTTPS场景,忽略了已用HTTPS但不带
www的域名(比如https://test-systems.co.uk) - 重定向URL拼接错误:若原域名已是
www.test-systems.co.uk,会生成www.www.test-systems.co.uk这类无效地址 - 多余的
{URL}条件,对规则逻辑无实际作用
正确的web.config重写规则
替换原<rewrite>节点内容为以下配置,即可实现所有指定URL重定向到https://www.test-systems.co.uk,同时保留原请求的路径和查询字符串:
<rewrite> <rules> <clear /> <!-- 强制HTTPS+WWW统一域名 --> <rule name="Force HTTPS and WWW" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAny"> <!-- 匹配所有未启用HTTPS的请求 --> <add input="{HTTPS}" pattern="^OFF$" /> <!-- 匹配所有非www开头的域名 --> <add input="{HTTP_HOST}" pattern="^www\.test-systems\.co\.uk$" negate="true" /> </conditions> <action type="Redirect" url="https://www.test-systems.co.uk/{R:1}" appendQueryString="true" redirectType="Permanent" /> </rule> </rules> </rewrite>
规则说明
logicalGrouping="MatchAny":满足任意一个条件即触发重定向,覆盖HTTP转HTTPS、不带www转带www两种场景redirectType="Permanent":返回301永久重定向,更利于搜索引擎优化appendQueryString="true":自动保留原请求的查询参数(比如原请求http://test-systems.co.uk/page?id=1,重定向后变为https://www.test-systems.co.uk/page?id=1)- 直接写死目标域名,避免出现重复
www的错误
内容的提问来源于stack exchange,提问作者tekf
相关产品推荐
相关产品推荐

