多查询字符串的.htaccess URL重写失败问题求助
解决Apache URL重写捕获多参数的问题
我来帮你搞定这个URL重写的问题!你遇到的核心问题是捕获组的使用方式不对——之前的规则要么用了贪婪的.*把所有路径内容都塞进第一个捕获组,要么只捕获了单个分段,导致$2、$3根本没有匹配到内容。
正确的RewriteRule规则
首先确保你的.htaccess文件开头已经开启了重写引擎,然后添加这条规则:
RewriteEngine On RewriteRule ^sale/([^/]+)/([^/]+)/([^/]+)/?$ sale.php?a=$1&b=$2&c=$3
规则解释
^sale/:匹配URL开头的sale/路径([^/]+):每个括号是一个独立的捕获组,[^/]+表示匹配除了斜杠之外的任意字符(至少一个),这样就能分别捕获三个参数段(比如sale、product、category)/?$:允许URL结尾有可选的斜杠(比如/sale/a/b/c/也能匹配)- 最后把三个捕获组分别对应到
a、b、c三个查询参数
为什么之前的规则失效?
咱们逐个看你试过的规则问题:
RewriteRule ^sale/(.*)/?$ sale.php?a=$1&b=$2&c=$3:(.*)是贪婪匹配,会把sale/后面的所有内容(包括斜杠)都塞进$1,所以$1 = sale/product/category,而$2、$3没有被任何捕获组匹配,自然为空。RewriteRule ^sale/(.*)$ sale.php?a=$1&b=$2&c=$3:和上面的问题一样,(.*)匹配了全部路径,$2、$3无内容。RewriteRule ^sale/([^/.]+)/?$ sale.php?a=$1&b=$2&c=$3:只定义了一个捕获组([^/.]+),只能匹配第一个分段(比如sale),后面的product/category没有被捕获,所以$2、$3还是空。
额外注意事项
- 确保你的Apache服务器已经启用了
mod_rewrite模块 - 网站根目录的
.htaccess文件需要被允许生效,即Apache配置中的AllowOverride All(针对当前站点目录)
内容的提问来源于stack exchange,提问作者user2468312
相关产品推荐
相关产品推荐

