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&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
相关产品推荐
相关产品推荐

