将.php伪静态为.html后ErrorDocument 404失效问题求助
解决方案
问题出在第二条Rewrite规则未验证目标.php文件是否存在。当访问不存在的xxx.html时,规则会直接将其重写为xxx.php,服务器找不到该xxx.php文件时,会返回默认的"File not found",而非触发自定义404配置。
修改方法是在第二条Rewrite规则前添加文件存在的判断条件,仅当对应的.php文件实际存在时才执行重写:
RewriteCond %{THE_REQUEST} (.*)\.php RewriteRule ^(.*)\.php $1.html [R=301,L] # 添加判断:对应的.php文件必须存在 RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteCond %{THE_REQUEST} (.*)\.html RewriteRule ^(.*)\.html$ $1.php [L] ErrorDocument 404 /404.php
说明
%{DOCUMENT_ROOT}/$1.php -f用于检查服务器上是否存在$1.php文件($1匹配xxx.html中的xxx部分)。- 只有文件存在时,才会执行重写规则;若文件不存在,重写不触发,服务器会正常处理
xxx.html的404请求,调用你配置的/404.php。
修改后,访问不存在的xxx.html时即可正常显示自定义404页面。
内容的提问来源于stack exchange,提问作者Em Hi
相关产品推荐
相关产品推荐

