Umbraco中URL重写:空格替换为+后出现404错误求助
解决Umbraco中带+的URL重写404问题
我来帮你拆解一下问题根源:
你遇到的核心问题是,当用+替代空格作为URL路径的一部分时,Umbraco的URL重写规则没有正确捕获并传递参数,导致返回404。这主要是因为默认情况下,UrlRewritingNet模块会先解码URL(把+转换成空格)再执行正则匹配,而你的后台逻辑可能只处理编码后的格式(比如%20或+),而非解码后的空格。
解决方案步骤
1. 修改重写规则,匹配原始未解码的URL
在你的规则中添加useOriginalUrl="true"属性,让模块直接匹配原始的URL字符串(保留+符号),这样捕获的$1参数就会是带+的地址,和你之前处理%20的逻辑兼容。
修改后的规则如下:
<add name="SaleRule" virtualUrl="^~/For-Sale/(.*)" destinationUrl="~/Result/Item?type=For-Sale&address=$1" rewriteUrlParameter="ExcludeFromClientQueryString" ignoreCase="true" useOriginalUrl="true" />
2. (可选)调整正则表达式的根路径匹配
如果上面的修改没生效,可能是部分版本的UrlRewritingNet对~符号的解析有问题,你可以把正则开头的^~/改成^/,直接匹配站点根目录的路径:
<add name="SaleRule" virtualUrl="^/For-Sale/(.*)" destinationUrl="~/Result/Item?type=For-Sale&address=$1" rewriteUrlParameter="ExcludeFromClientQueryString" ignoreCase="true" useOriginalUrl="true" />
3. 验证规则是否触发(调试用)
如果还是遇到问题,可以开启重写日志来排查:
在规则中添加logRewrites="true",然后查看App_Data目录下的UrlRewritingNet.log文件,确认带+的URL是否被规则正确匹配,以及参数传递是否符合预期。
4. 确认后台参数处理逻辑
最后,确保你的Result/Item页面在接收address参数时,能正确处理带+的字符串——它应该和处理%20的逻辑一致,因为+和%20都是空格的合法URL编码方式。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

