使用IIS URL Rewrite配置问号追加的URL重写规则
解决URL重写规则配置问题
首先,你的规则有几个关键问题需要调整,才能实现你要的效果——用户访问mydomain.com/test123时,服务器内部处理的是mydomain.com/?test123(浏览器地址栏保持不变):
正确的规则配置
<rule name="UF" stopProcessing="true"> <match url="^([_0-9a-z-]+)$" /> <action type="Rewrite" url="/?{R:1}" /> </rule>
为什么原规则不对?我来拆解一下:
- Match标签里不要包含域名:
match url属性匹配的是请求的URL路径部分(也就是域名后面的内容),不是完整的域名+路径。原规则里写example.com/([_0-9a-z-]+)会导致匹配不到任何请求,因为路径部分从来不会包含域名。 - Action类型选错了:你用了
Redirect,这会让浏览器跳转到新的URL(地址栏会变成mydomain.com/?test123),而你需要的是服务器内部重写(浏览器地址栏不变,服务器悄悄处理重写后的请求),所以应该用Rewrite类型。 - 正则匹配范围调整:
^([_0-9a-z-]+)$确保只匹配根路径下的单一分段(比如test123),不会匹配多级路径(比如test123/sub),如果需要支持多级可以调整正则,但根据你的需求这个就够了。
另外,如果你需要限制只对特定域名生效,可以添加conditions标签来过滤:
<rule name="UF" stopProcessing="true"> <match url="^([_0-9a-z-]+)$" /> <conditions> <add input="{HTTP_HOST}" pattern="^mydomain\.com$" /> </conditions> <action type="Rewrite" url="/?{R:1}" /> </rule>
这样就只会对mydomain.com生效,避免其他域名触发这个规则。
内容的提问来源于stack exchange,提问作者Carlos Patron
相关产品推荐
相关产品推荐

