1

我有一个网站,它使用 PHP/Apache 中的自定义 404 错误处理来显示特定页面。
例如http://metachat.org/recent

我觉得这是一种不好的做法,但这是我继承的代码......

尽管该页面在大多数浏览器上都能正确显示,但我遇到了 AVG Anti-Virus 劫持页面并将其重定向到非现场 404 页面的情况。

我试图在 PHP 中使用 header 命令强制一个标题(状态:200 OK),但是如果我对页面执行 curl -I,我会得到以下内容......

HTTP/1.1 404 Not Found
Date: Fri, 03 Oct 2008 11:43:01 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) DAV/2 SVN/1.1.4 PHP/4.3.10-16 mod_ssl/2
.0.54 OpenSSL/0.9.7e
X-Powered-By: PHP/4.3.10-16
Status: 200 OK
Content-Type: text/html

我猜第一行是 AVG 为其强制重定向设置的陷阱。如果不重写软件以使用 Mod_rewrite(我不太了解),我如何(在 PHP 中)在显示此页面时停止在标题中发送“HTTP:/1/1 404 Not Found”行?

谢谢。

4

3 回答 3

4

除了使用 URL 重写 (mod_rewrite) 或创建丢失的页面之外,别无他法。发生的事情是客户端请求一个不存在的页面。Apache 配置为在出现 404 错误时提供特殊页面,但它仍会发送 404 状态代码,然后 AVG 会捕获它。

因此,您可以执行以下操作:

RewriteEngine On
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule (.*) index.php?missing_content=$1

这将使用 missing_content 查询字符串参数中的 URL 路径将不存在的所有内容(因此会给出 404)重写到您的 index.php

于 2008-10-03T11:59:34.053 回答
4

如果您得到的是页面未找到错误,请不要让它发送状态 200 OK。请。

这是人们出于任何原因所做的最烦人的“技巧”之一。如果用户请求的页面不存在,请告诉他以及他的浏览器。对于搜索引擎,否则将抓取/缓存您的自定义错误页面,认为这是实际响应。

如果有人安装了一些显示其他内容而不是您的 404 的软件,这是他自己的问题,不要试图与之抗争,使您的服务对浏览器撒谎:)

于 2008-10-03T12:00:07.873 回答
0

如果内容非常小,某些浏览器不会显示 404 页面的内容。如果有更大的页面内容,他们会显示它。此规则因浏览器而异。尝试向您的 404 页面添加更多内容,看看是否有帮助。

于 2012-04-20T11:50:51.523 回答