用php编写一个客户端重定向服务器端


Writing a client redirect server side with php

我正在寻找客户端重定向到PHP中的另一个域。

我不想做301 - 302 - 307等重定向的原因是因为我希望页面向爬虫发送200 HTTP OK响应。

通常我使用模糊的JavaScript在一个静态的web主机,如S3上做到这一点,然而,我知道爬虫可能会捡到JS,因为它是客户端。

我使用的未混淆JS代码示例;

window.location.href = "http://yourURL.com";

但是,爬虫抓取PHP要困难得多,所以我想做一个类似的重定向,但是在PHP中。

如果有人能分享他或她的意见,最好的方法去做这件事,那就太好了。

提前感谢!

如PHP手册所述:

[…第二个特殊情况是"Location:"标头。它不仅将这个报头发送回浏览器,而且还将一个REDIRECT(302)状态码返回给浏览器,除非已经设置了201或3xx状态码。

也就是说,你可以这样做:

<?php
header('HTTP/1.1 201 Created'); // or as of PHP 5.4: http_response_code(201);
header('Location: http://yourURL.com/');

我现在不能测试它,我不确定这是否有效。


另一种可能性是"硬读"重定向地址的内容,并将其显示在您的页面上:

<?php
$content = file_get_contents("http://yourURL.com/");
echo $content; // this will output the full HTML from the webpage.

注意:上面的代码将只工作,如果你有allow_url_fopen = On指令在你的php.ini或有权限设置它的编程:

<?php
ini_set('allow_url_fopen', 'on');

这将提供一个200响应代码

PHP除了发送HTTP代码、Javascript或HTML元刷新标签外,不能以任何其他方式重定向页面。如果您使用的是混淆的Javascript,这可能是最好的方法。

您可以在Php中使用header()函数:

<?php
header('Location: http://yourURL.com/');

文档:http://php.net/manual/en/function.header.php

header()函数是您正在寻找的:

<?php
header("Location: http://yourURL.com/");
exit;

确保您之后exit,因为否则当标题被爬虫忽略时,您的页面仍将构建并发送给它,我认为这不是您正在寻找的行为。