重定向循环(HTTP_REFERER)

4
一个网站(wwww.fake-web-site.com)重定向其链接到我的网站(www.real-web-site.com)。只有第一页不同。
我编写了一个代码,将所有来自伪造网站的人重定向到google.com
if (strpos($_SERVER['HTTP_REFERER'],'fake-web-site.com') !== false)
  header('Location: http://www.google.com/search?q=real-web-site.com');

在Chrome浏览器上,如果有人打开假网站并点击与我的网站链接的那些链接,它将被重定向到google.com。之后,他可以从google.com打开我的网站。
在Firefox中,如果有人打开假网站并点击与我的网站链接的那些链接,它将被重定向到google.com。之后,如果他在google.com中点击real-web-site.com,他会再次重定向到google.com
我认为这与Firefox缓存机制有关。有人能给些建议吗?

这听起来有点令人困惑。你想实现什么?你想人工生成搜索请求,以虚假的方式增加页面的热度吗? - Mario
可能是 Firefox 缓存头的问题。 - user1646111
@Mario:不,假页面正在吸引我的客户,并且它的域名排名比我在搜索引擎中更好。我不想让这些链接指向我的网站。如果有人想访问真正的网站,他不应该从假网站找到它。 - masoud
尝试转储 $_SERVER,让我们看看会发生什么。 - Shushant
1个回答

0

浏览器缓存重定向。根据HTTP响应状态:

如果状态是301永久移动,那么浏览器应该并且(可能)会缓存它。

如果状态是302找到,那么浏览器不应该并且不会缓存它。

其他任何情况都由浏览器决定。从您的代码中看来,似乎您只是用200 OK进行响应。

您可以通过以下方式在PHP中设置响应头:

header("HTTP/1.0 302 Found");

这必须在任何其他正文或头部输出之前完成 - 除非您正在使用输出缓冲。


有趣,让我试试。 - masoud
在我看来,PHP在使用Location时默认使用302。为了确保响应真正不被缓存,请在HTTP头中明确禁止它(请参见https://dev59.com/03VD5IYBdhLWcg3wNY1Z#2068407)。 - Hirnhamster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接