RewriteRule无法捕获匹配数据,求排查重写规则配置错误
Apache mod_rewrite规则不生效问题排查
你的配置存在三处明显错误,具体如下:
- 反向引用语法错误:mod_rewrite的捕获组反向引用规则为
$n格式,你写反为n$,会被识别为普通字符串,无法正确传递捕获到的路径参数。 - 路径匹配前缀和RewriteBase冲突:你已经配置
RewriteBase /blog/指定规则的基准路径为/blog/,此时RewriteRule匹配的是基准路径去除后的相对路径,不需要再加blog/前缀,多余的前缀会导致规则匹配不到请求路径。 - 参数分隔符错误转义:重写规则的目标URL中不需要对
&做HTML转义,你写的&会被当成参数内容传递,无法正常分隔多个参数。
另外你提到第二条同类型规则可以正常运行,大概率是你实际运行的第二条规则并没有出现上述的语法错误,或是测试路径刚好命中了错误前缀的匹配逻辑。
修正后的参考配置(适配/blog目录下的.htaccess场景)
RewriteEngine on RewriteBase /blog/ # 匹配 /blog/a/参数1/参数2/ 格式的路径 RewriteRule ^a/(.*)/(.*)/?$ index.php?a=$1&b=$2 [NC] # 匹配 /blog/参数1/ 格式的路径,注意宽泛规则要放在精准规则之后 RewriteRule ^(.*)/?$ default.php?a=$1 [NC]
内容的提问来源于stack exchange,提问作者Beawull Pakia
相关产品推荐
相关产品推荐

