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

.htaccess重写规则如何正确支持含&字符的URL参数?

解决.htaccess RewriteRule匹配含&字符的term问题

问题核心在于URL中的&是保留字符,浏览器会自动将它识别为GET参数的分隔符,而非路径的一部分。比如你输入domain.com/index/2/jonathan&doe,实际服务器收到的请求路径是index/2/jonathan,同时多了一个无值的doe参数,根本到不了你的RewriteRule匹配逻辑里——这就是为什么你把&加到正则里也没用的原因。

正确解决分两步:

  1. 前端对特殊字符编码
    生成URL时,必须把term中的&(以及其他URL特殊字符)用encodeURIComponent()编码成%26。比如jonathan&doe要转成jonathan%26doe,最终URL为domain.com/index/2/jonathan%26doe。这样浏览器才会把%26当作路径的一部分完整传递给服务器。

  2. 简化RewriteRule的正则匹配
    不用手动罗列所有允许的字符,直接用[^/]+匹配路径中除分隔符/之外的所有内容,这样不管term里有什么编码后的字符都能被匹配到。修改后的规则如下:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^index/([0-9a-zA-Z_-]+)/([^/]+) index.php?id=$1&term=$2 [NC,L]

这样处理后,服务器收到index/2/jonathan%26doe的请求时,会正确匹配规则并内部重定向到index.php?id=2&term=jonathan&doe,PHP的$_GET['term']就能拿到完整的jonathan&doe值。

补充:不要尝试在服务器端直接处理未编码的&,因为浏览器已经提前拆分了参数,服务器根本接收不到路径里的&,前端编码是必须的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:55:56