You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:51:38