添加Rewrite Engine至.htaccess后404页面失效问题排查
问题解决:添加Rewrite规则后404页面失效的修复方案
你的问题出在第一条重写规则的逻辑上:原规则会把所有不带点的不存在请求强制重写成.php后缀,哪怕对应的.php文件也不存在。这种情况下,服务器会尝试加载这个不存在的PHP文件,返回的是PHP处理器的“file not found”错误,而非Apache的标准404响应,导致你设置的ErrorDocument无法触发。
修改后的.htaccess内容如下:
ErrorDocument 404 /404.php RewriteEngine On # 优先处理域名301重定向 RewriteCond %{HTTP_HOST} ^grandviewexteriorsystems.com [NC] RewriteRule ^(.*)$ http://www.grandviewexteriorsystems.com/$1 [L,R=301,NC] # 仅当目标.php文件存在时才重写无后缀请求 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^\.]+)$ $1.php [NC,L]
修改说明:
- 调整规则顺序:把域名301重定向放在最前面,确保所有请求先完成域名跳转,再处理后缀重写,避免逻辑冲突。
- 新增存在性校验:添加
RewriteCond %{REQUEST_FILENAME}.php -f条件,只有当要重写的目标.php文件确实存在时,才执行重写操作。这样请求不存在的页面时,会直接触发Apache的404机制,正常调用你的404.php页面。
另外可以检查下public_html目录下的404.php文件权限,确保设置为644,让服务器能正常读取。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

