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

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&amp;address=$1" 
     rewriteUrlParameter="ExcludeFromClientQueryString" 
     ignoreCase="true" 
     useOriginalUrl="true" />

2. (可选)调整正则表达式的根路径匹配

如果上面的修改没生效,可能是部分版本的UrlRewritingNet对~符号的解析有问题,你可以把正则开头的^~/改成^/,直接匹配站点根目录的路径:

<add name="SaleRule" 
     virtualUrl="^/For-Sale/(.*)" 
     destinationUrl="~/Result/Item?type=For-Sale&amp;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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:02:12