本文详解 .htaccess 中常见的重写规则错误,重点解决因条件缺失导致的 url 无限追加路径问题,并提供可直接部署的、兼顾安全性与可用性的无后缀 php 访问方案。
在 Apache 的 .htaccess 中实现「访问 example.com/about 自动加载 about.php」是常见需求,但若规则编写不当,极易引发无限重定向循环(如 URL 变为 …/mv/project/mv/project/…)。根本原因在于:重写规则未正确区分“原始请求”与“内部重写后的请求”,导致 RewriteRule 被反复触发。
你提供的配置中存在两个关键问题:
-
缺少 L(Last)标志:第一条 RewriteRule ^(.*)$ $1.php 执行后未终止规则链,Apache 会继续匹配后续规则(包括自身),造成 $1.php 再次被当作 ^(.*)$ 匹配,从而递归生成 xxx.php.php → xxx.php.php.php… 最终因路径解析失败,回退到目录层级拼接,形成 URL 不断重复的假象。
-
第二条规则逻辑矛盾且无效:
立即学习“PHP免费学习笔记(深入)”;