在 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的主要内容,如果未能解决你的问题,请参考以下文章