Chi*_*iru 4 php redirect nginx errordocument
我目前正在迁移到 nginx 服务器。我尝试将其放入我的 404 ErrorDocument 中,名为404.php:
<?php
header("Location: http://www.google.com/");
?>
Run Code Online (Sandbox Code Playgroud)
如果我现在尝试访问http://mydomain.com/404.php,这将按预期工作:它将我重定向到 Google。但是,一旦我尝试访问http://mydomain.com/iDoNotExist,就会显示 404 ErrorDocument ,而不会将我重定向到 Google。
这种行为对我来说似乎很奇怪。有什么办法可以解决这个问题吗?
编辑:
这是卷曲页面给我的结果:
卷曲-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/
Run Code Online (Sandbox Code Playgroud)
卷曲-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/
Run Code Online (Sandbox Code Playgroud)
编辑2:
正如 hakre 所问,我来自Apache设置,是的,我正在使用Chromium。至于 Apache,它曾经适用于所有 Gecko 和 Webkit 浏览器,甚至基于控制台的浏览器(例如 Lynx)。它可能也适用于 Internet Explorer,但我从未尝试过(这里没有 Windows,唷)。
您的浏览器的行为是正确的。响应Location: 标头对于状态代码 404 没有任何意义(比较14.30 Location和10.4 Client Error 4xx)。
因此,响应的超文本正文显示在浏览器中 - 正如代码 404 的 HTTP 规范所指定的那样(请参阅10.4.5 404 Not Found)。
为了允许将 HTTP 响应代码从 404 更改为其他代码(例如用于临时重定向的 302),您必须相应地配置Nginxerror_page指令:
error_page 404 = /404.php;
Run Code Online (Sandbox Code Playgroud)
如果没有等号 ( =),则无法使用 PHP 脚本更改状态代码:
header("Location: http://google.com"); # PHP sets 302 status code
Run Code Online (Sandbox Code Playgroud)
SAPI:php5-fpm
| 归档时间: |
|
| 查看次数: |
5094 次 |
| 最近记录: |