WEB CONFIG URL重写返回404,请求排查规则配置错误
问题分析与解决方案
兄弟,你的Web.config URL重写规则里有两个核心错误,导致服务器返回404,我给你一步步拆解并修正:
错误点解析
匹配规则的正则完全不符合需求
你期望的目标访问URL是localhost:62859/football/Liverpool,但你的规则里写的是^review/([0-9]+)/([_0-9a-z-]+):- 开头强制要求
review/前缀,但你想要的URL里根本没有这个前缀; - 第一个捕获组用了
[0-9]+(仅匹配数字),但你的分类参数football是字母,完全匹配不上。
- 开头强制要求
重写目标URL缺失核心页面路径
你的action里写的是?c={R:1}&t={R:2},这相当于直接指向根目录下的无文件名请求,服务器找不到对应的页面,自然返回404。正确的目标应该是review.aspx?c={R:1}&t={R:2}。
修正后的配置
下面是符合你需求的完整重写规则,还加了必要的条件避免冲突:
<rule name="Rewrite Review"> <match url="^([_0-9a-z-]+)/([_0-9a-z-]+)$" /> <conditions logicalGrouping="MatchAll"> <!-- 排除真实存在的文件和目录,避免影响静态资源或已有页面 --> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="review.aspx?c={R:1}&t={R:2}" /> </rule>
规则说明
- 匹配规则:
^([_0-9a-z-]+)/([_0-9a-z-]+)$会匹配所有形如/分类/标题的URL,两个捕获组分别提取分类(c参数)和标题(t参数),支持字母、数字、下划线和连字符; - 条件部分:确保只有当请求的不是真实文件或目录时才触发重写,比如你的网站里有
images/logo.png这类静态文件,不会被错误重写; - 重写目标:明确指向
review.aspx,并将捕获到的参数传递过去,服务器就能正确找到对应的页面处理请求了。
另外别忘了确认你的IIS已经安装并启用了URL重写模块,这是规则生效的前提哦!
内容的提问来源于stack exchange,提问作者MattHodson




