Web.Config重写规则中例外路径传递GET参数报错排查
解决IIS中例外路径带GET参数返回404的问题
这种情况我之前排查过好几次,大概率是你的URL重写规则没正确处理查询字符串(Query String),或者例外规则的匹配范围没覆盖带参数的请求场景。咱们一步步来调整:
先排查核心问题点
你提到不带参数的/its或/its/能正常访问,但带?value1=value2就404,说明带参数的请求没触发你的例外规则,反而走到了转发到index.php的规则里,而index.php没法处理这个请求,所以返回404。
调整web.config的重写规则
下面是修正后的完整配置示例,我会逐个解释关键细节:
<configuration> <system.webServer> <rewrite> <rules> <!-- 第一个例外规则:处理/its所有变体(带/不带斜杠、带参数、带子路径) --> <rule name="ITS Exception" stopProcessing="true"> <match url="^its(/.*)?$" /> <!-- 如果你是跳转到外部地址,用Redirect;如果是本地路径,改成Rewrite --> <action type="Redirect" url="http://你的目标地址/its{R:1}" appendQueryString="true" /> <!-- 本地路径的写法示例(比如指向站点内的its目录): <action type="Rewrite" url="/its{R:1}" appendQueryString="true" /> --> </rule> <!-- 第二个例外规则,按照上面的格式复制修改即可 --> <rule name="Another Exception" stopProcessing="true"> <match url="^你的第二个例外路径(/.*)?$" /> <action type="Redirect" url="http://对应目标地址{R:1}" appendQueryString="true" /> </rule> <!-- 所有其他请求统一转发到index.php --> <rule name="Forward to index.php" stopProcessing="true"> <match url=".*" /> <action type="Rewrite" url="/index.php" appendQueryString="true" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
关键配置说明
stopProcessing="true":这是重中之重!匹配到例外规则后,立刻停止执行后续规则,避免带参数的请求“漏网”走到index.php的转发规则里。^its(/.*)?$:用正则表达式覆盖所有以its开头的路径,包括/its、/its/、/its/xxx、/its/?xxx这些情况,{R:1}会自动捕获/后面的子路径(如果有的话),保证跳转路径完整。appendQueryString="true":强制把原请求的查询字符串附加到目标URL后面,这样?value1=value2这类参数会被正确传递到例外路径的目标地址。
额外检查项
- 如果你之前的例外规则里加了
<conditions>节点,里面如果有{QUERY_STRING}为空的限制,一定要删掉——这会直接过滤掉带参数的请求。 - 确认IIS的URL重写模块已经正确安装(你能正常转发其他请求,这个应该没问题,但还是可以在IIS管理器的模块列表里确认下)。
内容的提问来源于stack exchange,提问作者Fledermaus
相关产品推荐
相关产品推荐

