.htaccess重定向异常求助:账户类链接均指向同一页面
看起来你的Rewrite规则逻辑上是没问题的,但实际出现了所有mon-compte/*链接都加载mon-compte.php的情况,大概率是规则匹配顺序或者额外的配置干扰导致的,下面给你一步步排查和解决的方案:
1. 检查规则顺序与是否存在通用匹配规则
RewriteRule是从上到下按顺序匹配的,一旦匹配到某条规则并触发[L]标记,就会停止后续规则的匹配。如果你的.htaccess里在这些具体规则之后,还有类似这样的通用规则:
RewriteRule ^mon-compte/(.*)$ mon-compte.php [L,QSA]
那所有未被前面具体规则匹配到的mon-compte/*请求都会被这条规则拦截,跳转到mon-compte.php。
解决方法:把所有具体的mon-compte/xxx规则放在这条通用规则的前面,确保具体请求先匹配到对应的规则。
2. 关闭MultiViews选项
Apache的MultiViews(内容协商)功能可能会干扰Rewrite规则:当请求mon-compte/mes-commandes时,Apache会尝试寻找类似mon-compte.php的文件并直接加载,跳过Rewrite规则的处理。
解决方法:修改你的Options行,关闭MultiViews:
Options +FollowSymlinks -MultiViews
3. 验证文件存在性与权限
确认所有目标文件(比如mon-compte-commandes.php、mon-compte-pts.php等)都存在于网站根目录,并且Apache有读取这些文件的权限。如果目标文件不存在,Apache可能会自动 fallback到其他存在的相关文件(比如mon-compte.php)。
4. 清空浏览器缓存并测试
浏览器可能缓存了旧的重定向规则,导致新规则不生效。建议用无痕模式打开浏览器,或者清空缓存后重新测试链接。
5. 启用Rewrite日志排查(可选)
如果以上方法都没解决,可以开启Apache的Rewrite日志,查看具体的匹配过程,定位问题所在。在Apache的配置文件中添加:
RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 3
(注意:日志级别不要设太高,避免生成过大的日志文件,问题解决后记得关闭)
按照上面的步骤排查,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Vincent Blondaux

