在php中触发403,以便显示ErrorDocument

在php中触发403,以便显示ErrorDocument,php,.htaccess,http-status-code-403,Php,.htaccess,Http Status Code 403,最近我为我的服务器设置了定制的错误文档 我从一个404页面开始,这就像一个符咒:未找到的文件自动显示指定的404.php页面。 然而,403给我带来了一些麻烦。我用同样的方法设置它,但我只得到一个空白页。它不显示.htaccess文档中设置的403.php页面。 有什么想法吗 这是我的密码: .htaccess: Options -Indexes ErrorDocument 403 /403.php ErrorDocument 404 /404.php php: 只有当服务器(Apache)遇

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

我从一个404页面开始,这就像一个符咒:未找到的文件自动显示指定的404.php页面。 然而,403给我带来了一些麻烦。我用同样的方法设置它,但我只得到一个空白页。它不显示.htaccess文档中设置的403.php页面。 有什么想法吗

这是我的密码:

.htaccess:

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


只有当服务器(Apache)遇到403错误时,才会加载服务器配置get中定义的错误文档

如果您通过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并被重定向了?

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

右键单击并选择“查看源”。选择所有源并将其保存到域上的文件,如:

现在转到真正禁止的页面(或php的某些部分中的禁止情况)示例:

在任何HTML输出或标题之前回显下面的代码!(即使是一个空格也会导致PHP发送HTML/TEXT HTTP头,这是行不通的)下面的代码应该是您的第一行

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

您发布的代码是空白页:-?你希望它打印什么?@lvaroG.Vicario他想强制403通过some.php,服务器会自动将位置更改为403。php@DanFromGermany-你说得对。我错误地认为这是
403.php
中的代码(并且不必要地想知道他为什么再次发送状态代码)。正确。ErrorDocument指令用于确定Apache在答复触发给定状态代码的请求时应发送回的内容。如果您自己生成状态代码,Apache不知道也不关心:您的PHP脚本已经是输出。@ÁlvaroG.Vicario感谢您的确认!谢谢,这正好回答了我的问题!我以前到处找过,但不清楚。现在是了,再次感谢!在发送
403
标题后尝试了重定向选项,但我看到的是
HTTP/1.1 302在响应中找到了
标题。我做错了什么吗?除了我以前的评论之外,即使我只回复
标题(“HTTP/1.1 403 Unauthorized”);退出
,我看到
HTTP/1.1 200 OK
响应头的
内容长度:0
<?php header('HTTP/1.0 403 Forbidden');
$contents = file_get_contents('/home/your_account/public_html/domain.com/403.php', TRUE);
exit($contents);