gpt4 book ai didi

php - 重定向而不是 404 错误页面 - 状态代码不工作 (Nginx)

转载 作者:行者123 更新时间:2023-12-04 02:35:37 26 4
gpt4 key购买 nike

我目前正在迁移到 nginx 服务器。我尝试将其放入名为 404.php 的 404 ErrorDocument 中:

<?php
header("Location: http://www.google.com/");
?>

如果我现在尝试访问 http://mydomain.com/404.php,这会按预期工作:它将我重定向到 Google。但是一旦我尝试访问 http://mydomain.com/iDoNotExist,就会显示 404 ErrorDocument 而不会将我重定向到 Google。

我觉得这种行为很奇怪。有什么办法可以解决这个问题吗?

编辑:

这是 curl 页面给我的结果:

curl -I mydomain.com/404.php

HTTP/1.1 302 Moved Temporarily
Server: nginx/1.2.1
Date: Sun, 05 Jan 2014 11:31:15 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.4.4-14+deb7u7
Location: http://google.com/

curl -I mydomain.com/iDoNotExist

HTTP/1.1 404 Not Found
Server: nginx/1.2.1
Date: Sun, 05 Jan 2014 11:33:49 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.4.4-14+deb7u7
Location: http://google.com/

编辑 2:

正如 hakre 所问,我来自 Apache 设置,是的,我正在使用 Chromium。至于 Apache,这曾经适用于所有 Gecko 和 Webkit 浏览器,甚至是基于控制台的浏览器,如 Lynx。它可能也适用于 Internet Explorer,但我从未尝试过(这里没有 Windows,呸)。

最佳答案

您浏览器的行为是正确的。 Location: 响应 header 对于状态代码 404 没有意义(比较 14.30 Location10.4 Client Error 4xx)。

因此响应的超文本正文显示在浏览器中 - 正如 HTTP 规范对代码 404 所指定的(参见 10.4.5 404 Not Found)。


要允许将 HTTP 响应代码从 404 更改为其他代码(例如临时重定向的 302),您必须配置 Nginx error_page相应的指令:

error_page   404 = /404.php;

如果没有等号 (=),则无法使用 PHP 脚本更改状态码:

header("Location: http://google.com"); # PHP sets 302 status code

SAPI: php5-fpm

关于php - 重定向而不是 404 错误页面 - 状态代码不工作 (Nginx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20932750/

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