htaccess重写规则生效后配置ErrorDocument错误页面文件返回500错误问题
问题根因
现有重写规则会拦截所有不存在的文件/目录请求,转发到/crud/views/pages/路径下。当触发404/500错误时,Apache请求/404.html的动作会被规则拦截,如果根目录不存在该文件,就会触发无限内部重定向,最终返回500错误。
解决方案
根据你的404.html存放位置选择对应修改方案:
- 方案1:
404.html存放在网站根目录
在现有重写规则前添加跳过错误页重写的规则,完整配置如下:<IfModule mod_rewrite.c> RewriteEngine On # 跳过404错误页的重写逻辑 RewriteRule ^404\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /crud/views/pages/$1 [L] </IfModule> ErrorDocument 500 /404.html ErrorDocument 404 /404.html - 方案2:
404.html存放在/crud/views/pages/目录下
直接修正ErrorDocument的文件路径即可,完整配置如下:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /crud/views/pages/$1 [L] </IfModule> ErrorDocument 500 /crud/views/pages/404.html ErrorDocument 404 /crud/views/pages/404.html
验证注意事项
修改完成后清理浏览器缓存,再次访问不存在的路径验证效果,确保404.html文件权限设置为Apache进程可读,常规权限值为644即可。
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

