.htaccess配置的404错误页面无法正常显示问题排查
我来帮你排查下这个问题——这种只显示文件名、不渲染404页面内容的情况,通常是这几个常见原因导致的:
Apache未正确配置PHP处理规则
如果你的服务器没加载PHP模块,或者没有配置让Apache识别并执行.php文件,那么服务器只会把PageNotFound.php当作纯文本文件返回,自然只会显示文件名。你可以检查Apache的主配置文件(比如httpd.conf):- 确认存在
LoadModule php_module相关的加载指令(不同PHP版本写法可能略有不同,比如LoadModule php8_module) - 确认有
AddType application/x-httpd-php .php这类指令,告诉Apache把.php文件当作PHP脚本处理
- 确认存在
.htaccess中的404规则有误
首先确保你的ErrorDocument规则写法正确:ErrorDocument 404 /PageNotFound.php注意路径要以
/开头(表示网站根目录),如果省略斜杠写成ErrorDocument 404 PageNotFound.php,在根目录下可能暂时没问题,但如果服务器的路径解析逻辑异常,也可能导致无法正确定位并执行文件。另外,还要检查.htaccess里有没有其他Rewrite规则覆盖了这个404配置,比如某些重写规则可能把错误请求的处理逻辑改变了。服务器禁用了.htaccess的生效权限
Apache的主配置文件里,对应网站根目录的<Directory>块中,AllowOverride参数决定了.htaccess是否能生效。如果设置为AllowOverride None,那么.htaccess里的所有规则都会被忽略,服务器可能会使用默认的404响应设置,刚好默认指向了你的PageNotFound.php但没执行它。你需要把AllowOverride设置为All或者至少FileInfo,才能让ErrorDocument规则生效。文件权限配置错误
如果PageNotFound.php的文件权限设置不当,服务器可能没有权限读取或执行这个文件。建议把PHP文件的权限设置为644(所有者可读可写,组和其他用户只读),网站根目录的权限设置为755,确保Apache进程能正常访问该文件。浏览器缓存干扰
有时候浏览器会缓存旧的错误响应,导致你看不到最新的404页面。可以尝试清空浏览器缓存,或者用隐私/无痕模式访问不存在的页面,验证是否是缓存问题。
内容的提问来源于stack exchange,提问作者A Mak

