如何编写PHP重定向脚本

时间:2012-10-15 17:06:58

标签: php url redirect

如何在URL中添加链接时创建将重定向到自定义URL的PHP​​脚本。例如,当用户访问此内容时:

http://mydomain.com/link.php?=http://www.google.com

它应该立即将它们重定向到谷歌。

理想情况下,是否可以确保点击本身来自本地?

我知道这很可能是一个非常基本的PHP代码,但请注意我对它的了解非常有限,这限制了我编写它。

3 个答案:

答案 0 :(得分:2)

http://mydomain.com/link.php?url=http://www.google.com

<?php
 header("Location: {$_GET['url']}");
?>

此?

答案 1 :(得分:2)

您可以使用$ _SERVER变量的HTTP_REFERER来检查它是否来自本地域。

参考:http://php.net/manual/en/reserved.variables.server.php

对于重定向,请尝试使用以下

http://mydomain.com/link.php?r=http://www.google.com
header("Location:".$_GET['r']);

参考:http://in3.php.net/manual/en/function.header.php

我希望以下内容适合您,您可以将$ domain变量硬编码为mydomain.com

$url = "http://www.php.net/index.html";
$domain = str_ireplace('www.', '', parse_url($url, PHP_URL_HOST));
$refDomain = str_ireplace('www.', '', parse_url($_SERVER["HTTP_REFERER"], PHP_URL_HOST));

if(strcmp($domain, $refDomain) == 0)
{
     //your code goes here
     header("Location:".$_GET['r']);
}

答案 2 :(得分:0)

好的,我想在这里添加一个完整的答案。

您可以使用header发送重定向标头,如MrSil所说,

header("Location: $url"); // will redirect to $url!

如果您想阻止其他人使用您的重定向脚本,您可以执行以下操作:

$ref = $_SERVER['HTTP_REFERER'];
$host = parse_url($ref, PHP_URL_HOST);
if($host !== "mydomain.com"){
  // out side request
}

但是,HTTP_REFERER可能很容易被欺骗。那么,什么是更好的检查?

CSRF保护。它可能看起来有点矫枉过正,而且 完美这样做的方式,但它有所帮助。

另外,我认为不存在完美的解决方案。

阅读this以获取有关CSRF的更多信息。