IIS rewrite规则跳转aspx到html时域名重复叠加问题求助
问题原因分析
第一个跳转异常(出现重复主机名)
你的规则存在三个触发问题的点:
- 匹配范围错误:IIS URL重写模块如果在服务器全局级别配置规则,
match url匹配的内容会包含主机名/站点标识前缀,导致你捕获的{R:1}值为my.domain.com/hello而非预期的hello,拼接后得到的相对路径my.domain.com/hello.html被IIS自动补全当前主机名,就出现了http://my.domain.com/my.domain.com/hello.html的异常结果。 - 相对路径解析错误:你配置的action路径没有加前导斜杠
/,IIS会基于当前请求的上下文解析相对路径,在部分站点配置场景下也会触发路径拼接异常。 - 匹配规则疏漏:你当前的匹配规则
^(.*).aspx$中.没有转义,会匹配任意字符,可能命中非.aspx后缀的错误请求。
第二个跳转异常(跳转到http://hello.html)
你修改为http://{R:1}.html的逻辑完全错误:{R:1}捕获的是路径部分的内容,而非主机名,直接拼接在http://后自然会生成http://hello.html的错误跳转地址。
正确解决方案
首先确认你将规则配置在对应站点的URL重写模块中,而非服务器全局级别,再使用以下规则:
<rule name="redirect aspx to html" stopProcessing="true"> <match url="^(.*)\.aspx$" /> <action type="Redirect" url="/{R:1}.html" redirectType="Temporary" /> </rule>
规则修改说明
- 给action路径添加前导斜杠
/,强制路径从站点根目录开始解析,避免相对路径拼接异常 - 转义了匹配规则中的
.,确保只匹配.aspx后缀的请求 redirectType可根据需求修改:Temporary对应302临时重定向,Permanent对应301永久重定向
配置完成后访问http://my.domain.com/hello.aspx会正常跳转到http://my.domain.com/hello.html。
内容的提问来源于stack exchange,提问作者AntonOfTheWoods
相关产品推荐
相关产品推荐

