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

ASP.NET MVC Umbraco URL重写规则不匹配时跳转错误页方案咨询

解决方案:URL重写规则不匹配时跳转错误页

我来给你梳理下具体的实现步骤,核心思路是先让合法的URL匹配现有规则并停止后续处理,再用反向匹配规则拦截所有不符合要求的请求,跳转到错误页:

1. 优化现有匹配规则

首先要给你现有的Results规则加上stopProcessing="true"属性,这样当请求匹配到这条合法规则时,就会直接处理,不会再执行后面的其他规则,避免正确的请求被错误跳转。修改后的规则如下:

<add name="Results" 
     virtualUrl="^~/(UK|USA)/sample-code/([^/]+)-my-code.html" 
     rewriteUrlParameter="ExcludeFromClientQueryString" 
     destinationUrl="~/my-pages/example.aspx?region=$1&amp;location=$2" 
     redirectMode="Permanent" 
     ignoreCase="true" 
     stopProcessing="true" />

2. 添加错误页跳转规则

接下来添加一条专门拦截不符合要求的URL的规则,这里我们用负向前瞻正则来精准匹配那些以UK或USA开头,但不包含sample-code或者不以-my-code.html结尾的请求,然后重定向到你的错误页(比如~/error.aspx):

<add name="RedirectInvalidToError"
     virtualUrl="^~/(UK|USA)/(?!sample-code/[^/]+-my-code.html$).*"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/error.aspx"
     redirectMode="Permanent"
     ignoreCase="true" />

规则说明:

  • ^~/(UK|USA)/:匹配所有以UK/或USA/开头的根路径请求
  • (?!sample-code/[^/]+-my-code.html$):负向前瞻语法,确保请求路径的后续部分不是合法的sample-code/xxx-my-code.html格式(xxx代表任意不含斜杠的字符)
  • .*:匹配剩余的任意内容,确保覆盖所有不符合规则的情况

3. 注意规则顺序

一定要把Results规则放在RedirectInvalidToError规则前面,因为URL重写规则是按从上到下的顺序执行的,先处理合法请求,剩下的不符合规则的请求才会被错误跳转规则捕获。

如果你的错误页需要传递错误标识(方便后续排查或提示用户),可以修改destinationUrl为:

~/error.aspx?error=invalid_request_url

内容的提问来源于stack exchange,提问作者Yaseer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:57:19