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

使用正则重写时,含%20的URL触发.htaccess返回403错误

解决URL含%20时.htaccess重写触发403的问题

当URL路径中包含%20(空格的URL编码)时,Apache会自动将%{REQUEST_URI}解码为包含实际空格的字符串。你的原规则直接将这个带空格的内容作为查询参数传递,而未编码的空格在URL查询字符串中属于非法字符,触发了Apache的安全拦截,返回403错误。而用+表示空格时,+在URL路径部分不会被解码为空格,所以传递到参数里是合法字符,不会触发拦截。

解决方案

在RewriteRule中添加B(Escape Backreferences)标志,该标志会自动对反向引用中的特殊字符进行URL编码,把空格转换成%20,确保重定向后的URL合法。

修改后的规则:

RewriteCond %{REQUEST_URI} (.*)/(.*)
RewriteRule ^(.+)$ /test.php?url=%2 [L,R=301,B]

如果你的需求是获取最后一个斜杠之后的路径部分,还可以简化规则,去掉多余的RewriteCond:

RewriteRule ^.+/(.+)$ /test.php?url=$1 [L,R=301,B]

这样更简洁,也能避免分组引用的混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:42:50