.htaccess中ErrorDocument 404与RewriteRule共存时失效,报500错误
.htaccess RewriteRule导致ErrorDocument 404触发500错误的解决办法
问题原因
你的配置中,当触发404错误时,请求/404.html会被Rewrite规则匹配并重写到/stores/404.html,如果该路径下的文件也不存在,就会陷入循环重写,最终服务器返回500内部错误。同时ErrorDocument指令放在<IfModule mod_rewrite.c>内部,也可能导致模块未加载时该指令失效。
修正后的配置
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 排除404页面,避免被重写规则处理 RewriteCond %{REQUEST_URI} !^/404\.html$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /stores/$1 [NC,L] </IfModule> ErrorDocument 404 /404.html
关键调整说明
- 将
ErrorDocument 404 /404.html移出<IfModule mod_rewrite.c>块,确保无论mod_rewrite模块是否加载,404错误页面配置都能生效。 - 添加
RewriteCond %{REQUEST_URI} !^/404\.html$条件,让404页面的请求跳过重写规则,直接访问根目录下的真实/404.html文件,避免循环重写。
额外检查项
- 确认网站根目录下确实存在
/404.html文件 - 确保服务器对该文件有读取权限
内容的提问来源于stack exchange,提问作者CforCODE
相关产品推荐
相关产品推荐

