单个ErrorDocument指令捕获所有错误(.htaccess)

时间:2010-04-10 00:27:54

标签: apache .htaccess mod-rewrite errordocument

是否存在类似通配符指令的内容来捕获所有可能的错误并在单个自定义错误页面中处理它们?

ErrorDocument 404 /error.php?code=404
ErrorDocument 403 /error.php?code=403
...
ErrorDocument NNN /error.php?code=NNN #possible use of RegExp?

我知道我可能不会在这里处理很多自定义错误页面,但我对此感到好奇。

5 个答案:

答案 0 :(得分:26)

这是不可能的。对于要处理的每个状态代码,您需要使用ErrorDocument指令,而不是使用默认错误处理程序。

答案 1 :(得分:3)

您可以通过REDIRECT_STATUS环境变量(由Apache设置)在脚本中提取错误,而不是传入错误状态代码。请参阅:http://httpd.apache.org/docs/2.0/custom-error.html

答案 2 :(得分:2)

感谢@gadget-guru,您启发我构建了一个脚本来测试所有错误,并构建了这个 .htaccess 文件来一次性捕获所有错误。

ErrorDocument 400 /
ErrorDocument 401 /
ErrorDocument 402 /
ErrorDocument 403 /
ErrorDocument 404 /
ErrorDocument 405 /
ErrorDocument 406 /
ErrorDocument 407 /
ErrorDocument 408 /
ErrorDocument 409 /
ErrorDocument 410 /
ErrorDocument 411 /
ErrorDocument 412 /
ErrorDocument 413 /
ErrorDocument 414 /
ErrorDocument 415 /
ErrorDocument 416 /
ErrorDocument 417 /
ErrorDocument 422 /
ErrorDocument 423 /
ErrorDocument 424 /
ErrorDocument 426 /
ErrorDocument 428 /
ErrorDocument 429 /
ErrorDocument 431 /
ErrorDocument 451 /
ErrorDocument 500 /
ErrorDocument 501 /
ErrorDocument 502 /
ErrorDocument 503 /
ErrorDocument 504 /
ErrorDocument 505 /
ErrorDocument 506 /
ErrorDocument 507 /
ErrorDocument 508 /
ErrorDocument 510 /
ErrorDocument 511 /

这会将用户重定向到主页,但您当然可以选择任何页面。示例:

ErrorDocument 511 /error.html

注意,任何其他错误代码都会破坏服务器,导致 HTTP 500

答案 3 :(得分:0)

我找不到一种用一行处理所有ErrorDocument的方法。但是您不必写出所有重定向。您可以通过以下方式在PHP中传递ErrorCode:

$response_code = http_response_code()

我的.htaccess看起来像

ErrorDocument 401 /error.php
ErrorDocument 402 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php

答案 4 :(得分:0)

全面参考...据我所知...

第一个-.htacess格式

第二个-描述。

我在这里找到的所有这些-> https://httpstatuses.com/

这些都是代码-不只是错误 ..有些会破坏您的网站。

ErrorDocument 100 https://EXAMPLE.com
ErrorDocument 101 https://EXAMPLE.com
ErrorDocument 102 https://EXAMPLE.com
ErrorDocument 200 https://EXAMPLE.com
ErrorDocument 201 https://EXAMPLE.com
ErrorDocument 202 https://EXAMPLE.com
ErrorDocument 203 https://EXAMPLE.com
ErrorDocument 204 https://EXAMPLE.com
ErrorDocument 205 https://EXAMPLE.com
ErrorDocument 206 https://EXAMPLE.com
ErrorDocument 207 https://EXAMPLE.com
ErrorDocument 208 https://EXAMPLE.com
ErrorDocument 226 https://EXAMPLE.com
ErrorDocument 300 https://EXAMPLE.com
ErrorDocument 301 https://EXAMPLE.com
ErrorDocument 302 https://EXAMPLE.com
ErrorDocument 303 https://EXAMPLE.com
ErrorDocument 304 https://EXAMPLE.com
ErrorDocument 305 https://EXAMPLE.com
ErrorDocument 307 https://EXAMPLE.com
ErrorDocument 308 https://EXAMPLE.com
ErrorDocument 400 https://EXAMPLE.com
ErrorDocument 401 https://EXAMPLE.com
ErrorDocument 402 https://EXAMPLE.com
ErrorDocument 403 https://EXAMPLE.com
ErrorDocument 404 https://EXAMPLE.com
ErrorDocument 405 https://EXAMPLE.com
ErrorDocument 406 https://EXAMPLE.com
ErrorDocument 407 https://EXAMPLE.com
ErrorDocument 408 https://EXAMPLE.com
ErrorDocument 409 https://EXAMPLE.com
ErrorDocument 410 https://EXAMPLE.com
ErrorDocument 411 https://EXAMPLE.com
ErrorDocument 412 https://EXAMPLE.com
ErrorDocument 413 https://EXAMPLE.com
ErrorDocument 414 https://EXAMPLE.com
ErrorDocument 415 https://EXAMPLE.com
ErrorDocument 416 https://EXAMPLE.com
ErrorDocument 417 https://EXAMPLE.com
ErrorDocument 418 https://EXAMPLE.com
ErrorDocument 421 https://EXAMPLE.com
ErrorDocument 422 https://EXAMPLE.com
ErrorDocument 423 https://EXAMPLE.com
ErrorDocument 424 https://EXAMPLE.com
ErrorDocument 426 https://EXAMPLE.com
ErrorDocument 428 https://EXAMPLE.com
ErrorDocument 429 https://EXAMPLE.com
ErrorDocument 431 https://EXAMPLE.com
ErrorDocument 444 https://EXAMPLE.com
ErrorDocument 451 https://EXAMPLE.com
ErrorDocument 499 https://EXAMPLE.com
ErrorDocument 500 https://EXAMPLE.com
ErrorDocument 501 https://EXAMPLE.com
ErrorDocument 502 https://EXAMPLE.com
ErrorDocument 503 https://EXAMPLE.com
ErrorDocument 504 https://EXAMPLE.com
ErrorDocument 505 https://EXAMPLE.com
ErrorDocument 506 https://EXAMPLE.com
ErrorDocument 507 https://EXAMPLE.com
ErrorDocument 508 https://EXAMPLE.com
ErrorDocument 510 https://EXAMPLE.com
ErrorDocument 511 https://EXAMPLE.com
ErrorDocument 599 https://EXAMPLE.com

这是粘贴的确切副本。它不是我的,但是我将列表重新格式化为上面。

1xx信息

100继续
101交换协议
102处理中

2××成功

200 OK
201已创建
202已接受
203非权威信息
204没有内容
205重设内容
206部分内容
207种多状态
208已报告
226 IM已使用

3××重定向

300个多项选择
301永久移动
302找到
303查看其他
304未修改
305使用代理
307临时重定向
308永久重定向

4××客户端错误

400错误的请求
401未经授权
402需要付款
403禁止
找不到404
405方法不允许
406不可接受
需要407代理身份验证
408请求超时
409冲突
410已逝
411需要的长度
412前提条件失败
413有效载荷过大
414请求URI太长
415不支持的媒体类型
416请求的范围不满足
417预期失败
418我是茶壶
421错误的请求
422无法处理的实体
423锁定
424依赖性失败
426需要升级
428需要前提条件
429请求太多
431请求标头字段太大
444连接已关闭而没有响应
451由于法律原因而无法使用
499客户关闭请求

5××服务器错误

500内部服务器错误
501未实现
502错误的网关
503服务不可用
504网关超时
505 HTTP版本不受支持
506变体还正在协商
507存储空间不足
508检测到循环
510未扩展
511需要网络身份验证
599网络连接超时错误