我正在寻找客户端重定向到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
,因为否则当标题被爬虫忽略时,您的页面仍将构建并发送给它,我认为这不是您正在寻找的行为。