我目前正在转向nginx服务器。我尝试将它放在我的名为404.php
的<...}}的错误文档中:
<?php
header("Location: http://www.google.com/");
?>
如果我现在尝试访问http://mydomain.com/404.php
,这可以正常运行:它会将我重定向到Google。但是,一旦我尝试访问http://mydomain.com/iDoNotExist
,404错误文档就会显示为而不会将我重定向到Google。
这种行为对我来说似乎很奇怪。有什么方法可以解决这个问题吗?
修改 的
这是卷曲页面给我的东西:
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,phew)。
答案 0 :(得分:4)
浏览器的行为是正确的。 Location:
响应标头对状态代码404没有意义(比较14.30 Location和10.4 Client Error 4xx)。
因此,响应的超文本正文显示在浏览器中 - 由代码404的HTTP规范指定(参见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