如何在Apache RewriteRule的正则表达式中添加+(加号)匹配规则?
RewriteRule规则支持匹配+号的修正方案
你之前修改不生效的核心原因有两个:
- 字符组内连字符
-的位置异常:你将+放在-之后,-没有位于字符组的首尾位置时会被正则解析为范围运算符,而非匹配普通的连字符,导致整个字符组匹配逻辑异常。 - Apache mod_rewrite默认解码规则:URL路径中的
+默认会被mod_rewrite解码为空格,即便正则匹配成功,传递给index.php的url参数也会丢失+,看起来匹配不生效。
正确修改方案
调整字符组内字符顺序,将+放在-之前保证-位于字符组末尾,同时添加B标志保留特殊字符的原始编码传递:
RewriteRule ^([A-Za-z0-9+-]+)/?$ index.php?url=$1 [L,B]
如果担心位置问题,也可以直接转义连字符,无需调整字符顺序:
RewriteRule ^([A-Za-z0-9\-+]+)/?$ index.php?url=$1 [L,B]
验证注意事项
- 若不需要保留
+原样传递到url参数,可以省略B标志,仅修改正则部分即可。 - 如果修改后还是不生效,检查你原来的规则中是否有复制带入的不可见软连字符,直接复制上面的完整规则替换原有规则即可。
- 修改.htaccess后建议用浏览器无痕模式测试,避免旧的重定向缓存影响验证结果。
内容的提问来源于stack exchange,提问作者guru38
相关产品推荐
相关产品推荐

