gpt4 book ai didi

php - 从 PHP 访问 apache errordocument 指令

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:59 26 4
gpt4 key购买 nike

如果不满足某些条件,我想使 php 脚本输出像真正的 404 页面(在 Apache ErrorDocument 指令中设置)。我不确定如何/是否可以从 PHP 访问此值..

if(!@$_SESSION['value']){
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
echo $default_page['404'];
exit();
}
echo 'Welcome to a secret place.';

我知道 ErrorDocument 值可以被覆盖,但我对 Apache 硬编码的“默认”值特别感兴趣。如果有可能知道被覆盖的值(例如被 .htaccess 文件),那么这是一个好处 :)

http://httpd.apache.org/docs/2.0/mod/core.html#ErrorDocument

编辑:明确地说,我想从 PHP 将内容发送到 Apache 的默认 404 页面(或 403 等)。如果我只单独使用 header 则不会向客户端/用户输出任何内容(至少在 FF/Chrome 中,IE 有自己的内置页面显示)。

最佳答案

从 PHP 设置响应代码的推荐方法是@mario 建议的:

Header('Status: 404 Not Found');

如果您想要获取服务器通常会为 404 提供的页面正文,并且不关心 URL 在用户浏览器中被重写,您可以使用如下内容:

$uri_404 = 'http://'
. $_SERVER['HTTP_HOST']
. ($_SERVER['HTTP_PORT'] ? (':' . $_SERVER['HTTP_PORT']) : '')
. '/was-nowhere-to-be-seen';
Header("Location: $uri");

(当您直接访问 Location header 字段时,您需要提供完整的 URI。)这样做的结果是用户的浏览器将最终指向该虚假位置,这可能不是你想要的。 (可能不是。)因此您实际上可以自己收集页面的内容并将两者结合起来,实际上:

Header('Status: 404 Not Found');

$uri_404 = 'http://'
. $_SERVER['HTTP_HOST']
. ($_SERVER['HTTP_PORT'] ? (':' . $_SERVER['HTTP_PORT']) : '')
. '/was-nowhere-to-be-seen';
$curl_req = curl_init($uri);
curl_setopt($curl_req, CURLOPT_MUTE, true);
$body = curl_exec($curl_req);
print $body;
curl_close($curl_req);

那应该获取服务器报告的伪造 URI 的 404 页面的内容,然后您可以复制它并自己使用。这应该正确处理任何 ErrorDocument 404 处理程序输出。

关于php - 从 PHP 访问 apache errordocument 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4856425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com