.htaccess配置错误:访问不存在的.php文件无法正确跳转404求助
问题根因
你配置的ErrorDocument 404规则仅对Apache直接处理的非PHP请求生效。.php后缀的请求会优先转发给PHP解释器处理,当对应文件不存在时,PHP会返回默认的“File not found”响应,不会触发Apache层面的自定义404规则。
修复方案
调整后的完整.htaccess配置如下:
Options +FollowSymLinks Options -Indexes php_value default_charset None AddDefaultCharset utf-8 # 改为内部路径,保留404状态码,避免302跳转 ErrorDocument 404 /404 RewriteEngine On RewriteBase / # 裸域名跳转www RewriteCond %{HTTP_HOST} ^example.com$ [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] # HTTP跳转HTTPS RewriteCond %{HTTPS} !=on RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # 新增:处理.php后缀请求 # 请求.php结尾且文件不存在,直接触发404 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule \.php$ - [R=404,L] # 可选配置:存在的.php文件访问自动跳转到无后缀路径,统一访问格式 # RewriteCond %{REQUEST_FILENAME} -f # RewriteRule ^(.*)\.php$ /$1 [R=301,L] # 原去.php扩展名规则 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php
配置说明
- 调整
ErrorDocument 404为内部路径/404,避免用户访问不存在资源时出现302跳转,保留正确的404 HTTP状态码,更符合SEO规范 - 新增的
.php后缀校验规则会在PHP处理请求前先校验文件是否存在,不存在的请求直接触发Apache的自定义404规则,覆盖你遇到的异常场景 - 可选的带后缀访问跳转规则可以统一站点访问格式,避免同一个页面同时存在带后缀和不带后缀两个访问路径
内容的提问来源于stack exchange,提问作者AlexM
相关产品推荐
相关产品推荐

