
当在本地开发环境中新增 about.php 等 php 文件却始终返回“404 not found”错误时,问题通常并非文件缺失,而是 web 服务器未正确识别或路由该请求——尤其在使用 apache 的 .htaccess 重写规则、虚拟主机配置或 url 重写机制的项目中。
该错误看似是文件路径问题,实则多为服务器端路由控制逻辑所致。从你提供的信息可确认以下关键事实:
- index.php 和 search.php 可正常访问 → 说明 PHP 解析、Web 服务(如 Apache/XAMPP)及基础目录结构均无问题;
- 所有新建的 .php 文件(包括简单 HTML 结构)均 404 → 排除文件权限、编码、BOM 头等常见文件级问题;
- 全新项目中同样文件可运行 → 进一步证实是当前项目的特定配置干扰了直接 PHP 文件访问。
✅ 最可能的原因是:项目启用了 URL 重写(RewriteEngine),且规则未放行原始 .php 文件请求。
例如,.htaccess 中可能存在类似以下规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]该配置会将所有非真实文件/目录的请求统一转发给 index.php(常用于 MVC 路由)。但若 about.php 确实存在,理论上应被 !-f 条件排除而直接访问——除非:
- .htaccess 文件未被 Apache 启用(检查 httpd.conf 中 AllowOverride All 是否对项目目录生效);
- 重写规则中误加了 RewriteBase / 或路径偏移,导致匹配异常;
- 存在更早的 RewriteRule 拦截了 .php 扩展名(如强制去除 .php 后缀,但未配置对应重写)。
? 快速验证与解决步骤:
检查 .htaccess 文件是否存在并生效
在项目根目录下查找 .htaccess,临时重命名为 .htaccess.bak,刷新 http://localhost:84/Projects/Calculator/Calculator/about.php。若此时可访问,即确认是重写规则导致。-
修正重写规则(推荐)
若需保留友好 URL,应在重写前显式放行真实 PHP 文件:RewriteEngine On # 允许直接访问 .php 文件 RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} \.php$ RewriteRule ^ - [L] # 其他路由(仅处理不存在的文件/目录) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] 验证服务器配置(XAMPP/WAMP 用户)
确保 Apache 的 mod_rewrite 已启用(XAMPP 控制面板 → Apache → Config → httpd.conf,确认 LoadModule rewrite_module modules/mod_rewrite.so 未被注释,且对应块中含 AllowOverride All)。
⚠️ 注意:不要依赖“复制 index.php 改名”的临时方案(如答案所提),它虽可能绕过某些逻辑判断,但未触及根本问题,且易引发后续维护混乱。
立即学习“PHP免费学习笔记(深入)”;
✅ 总结:PHP 文件 404 的核心排查顺序应为:
① 检查 .htaccess 是否存在及规则逻辑;
② 验证 Apache mod_rewrite 与 AllowOverride 配置;
③ 审查虚拟主机或路由入口(如 index.php 是否接管了全部请求);
④ 最后才考虑文件系统层面问题(权限、大小写、隐藏字符等)。
通过以上结构化排查,可精准定位并永久解决此类“文件存在却 404”的典型开发环境问题。











