46

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

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

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

4

5 回答 5

32

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

于 2010-04-10T07:28:22.103 回答
8

供完整参考...据我所知...

首先 - .htaccess格式化

第二 - 说明。

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

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

像这样使用:

ErrorDocument 100 https://EXAMPLE.com

这是确切的复制粘贴。它不是我的,但是我重新格式化了列表。


(悬停看说明,点击看详情。)

1×× :信息

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


2××:成功

200:正常
201:已创建
202:已接受
203:非权威信息
204:正常(无内容)
205:重置内容
206:部分内容
207:多状态
208:已报告
226 : 即时通讯使用


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:我是茶壶
422:无法处理的实体
423:锁定
424:方法失败
426:需要升级
428:需要先决条件
429​​ .") :请求过多
431:请求标头字段太大
444:无响应
451:由于法律原因不可用
499:客户关闭请求


5××:服务器错误

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

来源

于 2019-05-13T09:57:52.667 回答
5

感谢@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

于 2021-02-18T11:55:34.150 回答
4

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

于 2010-12-07T16:50:09.930 回答
2

我没有找到一种用一行来处理所有 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
于 2018-08-18T10:43:43.387 回答