在 php 中触发 403 以显示 ErrorDocument

Posted

技术标签:

【中文标题】在 php 中触发 403 以显示 ErrorDocument【英文标题】:trigger 403 in php so that it shows the ErrorDocument 【发布时间】:2014-02-12 18:29:41 【问题描述】:

最近我为我的服务器设置了定制的错误文档。

我从 404 页面开始,这就像一个魅力:找不到文件自动显示指定的 404.php 页面。 但是,使用 403 我遇到了一些麻烦。我以同样的方式设置它,但我只得到一个空白页。它没有显示 .htaccess 文档中设置的 403.php 页面。 有什么想法吗?

这是我的代码:

.htaccess:

Options -Indexes
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php

php:

<?php 
header("HTTP/1.1 403 Unauthorized");
exit;
?>

【问题讨论】:

您发布的代码一个空白页:-?你希望它打印什么? @ÁlvaroG.Vicario 他想通过 some.php 强制 403 并且服务器自动将位置更改为 403.php @DanFromGermany - 你是对的。我错误地认为它是403.php 中的代码(并且不必要地想知道他为什么再次发送状态代码)。 【参考方案1】:

服务器配置中定义的错误文档仅在 服务器 (Apache) 遇到 403 错误时才被加载。

如果您通过 PHP 强制错误,例如发送 403 状态代码,这会发生在 PHP 而不是 Apache。

所以当你已经知道我要渲染的网站会因为未经授权而失败,为什么要让 apache 来决定会发生什么?

<?php 
header("HTTP/1.1 403 Unauthorized");
// either:
header("Location: /403.php");
// or:
include('403.php');
exit;
?>

我从一个 404 页面开始,这就像一个魅力:

你确定吗?

您是否有一个脚本,发送 404 并被重定向到 404.php? 还是您只是打开了一个不存在的 URI 并被重定向?

【讨论】:

正确。 ErrorDocument 指令用于确定 Apache 在回复触发给定状态代码的请求时应发回的内容。如果你自己生成状态码,Apache 不知道也不关心:你的 PHP 脚本已经是输出了。 @ÁlvaroG.Vicario 感谢您的确认! 谢谢,这正好回答了我的问题!之前也找过,不清楚。现在好了,再次感谢! 在发送403 标头后尝试了重定向选项,但我看到HTTP/1.1 302 Found 标头作为响应。我做错什么了吗? 除了我之前的评论之外,即使我只回复header("HTTP/1.1 403 Unauthorized"); exit;,我看到HTTP/1.1 200 OK 响应头带有Content-Length: 0【参考方案2】:

转到您服务器的真实 403 页面。 (转到您服务器上的禁止 URL,或转到您喜欢的任何 403 页面)

右键单击并选择“查看源代码”。选择所有源并将其保存到您域上的文件中,例如:http://domain.com/403.php

现在转到您真正的禁止页面(或您的 php 某些部分中的禁止情况)示例:http://domain.com/members/my_forbidden_page.php

在任何 html 输出或标题之前回显此代码! (即使是空格也会导致 PHP 发送 HTML/TEXT HTTP Header 并且它不会工作)下面的代码应该是你的第一行!

<?php header('HTTP/1.0 403 Forbidden');
$contents = file_get_contents('/home/your_account/public_html/domain.com/403.php', TRUE);
exit($contents);

我通过 CPANEL 最新访问者进行了检查和验证,它被注册为确切的 403 事件。

【讨论】:

以上是关于在 php 中触发 403 以显示 ErrorDocument的主要内容,如果未能解决你的问题,请参考以下文章

PHP上传文件显示403服务器错误

神秘 403 错误

在 Rails 中触发 HTTP 错误

IIS配置PHP环境:测试PHP时出现=》HTTP 错误 403.1 禁止访问:禁止执行访问

本地主机上的 php 错误:访问被禁止!错误 403

jenkins的触发远程构建时403或需要登录问题