能否将多个ErrorDocument状态码规则合并为一行简化htaccess配置?
结论
该需求完全可实现,根据你使用的Apache版本不同,有两种简化方案:
方案1:Apache 2.4及以上版本(最简便)
Apache 2.4开始支持ErrorDocument直接指定状态码范围,仅需2行配置即可覆盖所有4xx、5xx错误:
ErrorDocument 400-499 /errors.php ErrorDocument 500-599 /errors.php
你不需要在URL后拼接?error=xxx参数,在errors.php中可以直接通过全局变量拿到实际错误状态码:
// errors.php 中获取状态码的代码 $error_code = $_SERVER['REDIRECT_STATUS']; // 注意要主动输出对应状态码,避免所有错误默认返回200 http_response_code((int)$error_code);
方案2:Apache 2.2及更早版本
低版本Apache不支持状态码范围配置,你可以选择两种处理方式:
- 仍然保留逐条
ErrorDocument配置,但删除URL后的参数,直接指向/errors.php,依然通过$_SERVER['REDIRECT_STATUS']拿状态码,简化配置内容 - 如果不想写多条ErrorDocument,可以通过mod_rewrite规则实现统一跳转,配置如下:
RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^([45][0-9]{2})$ RewriteRule ^.*$ /errors.php?error=%1 [L]
注意事项
确保errors.php文件本身不会触发404错误,否则会引发重定向死循环。
内容的提问来源于stack exchange,提问作者deeid
相关产品推荐
相关产品推荐

