【问题标题】:Having issue with PHP URL Redirect Between Multiple Domains多个域之间的 PHP URL 重定向问题
【发布时间】:2013-03-16 17:31:00
【问题描述】:

我的 PHP 技能有点欠缺,我已经尝试了一段时间的故障排除并寻找没有运气的答案......我相信这很简单。

我在一个域上有一个页面,它正在检查是否存在 cookie,如果不存在,它会将用户发送到一个完全独立的域以输入他们的出生日期。一旦他们进入并超过 21 岁,他们将被重定向回原始域,但由于某种原因,我的脚本仅捕获引用域的子目录,而不是整个内容。

因此,用户通过假设的 URL abc.com 访问以下页面:

<?php 
function over21(){  
    session_start();
    $redirect_url='http://xyz.com'; 
    $validated=false;  
    if(!empty($_COOKIE["over21"])) { $validated=true; } 
    if(!$validated && isset($_SESSION['over21'])) { $validated=true; } 
    if($validated) { return; } 
    else { 
        $redirect_url=$redirect_url."?return=".$_SERVER['REQUEST_URI']; 
        header('location: '.$redirect_url); 
        exit(0); 
    } 
} 
over21(); 
?>

<html>
  <head>
    <title>abc.com page</title>
  </head>
  <body>
    Before you are able to read this content, you will be redirected to xyz.com to validate your age
  </body>
</html>

到目前为止一切顺利,他们现在被发送到 xyz.com 以输入他们的出生日期:

<?php
session_start();
if(isset($_POST['submit']))
{
    $month = $_POST['month'];
    $day = $_POST['day'];
    $year = $_POST['year'];

    $birthday = mktime(0,0,0,$month,$day,$year);
    $difference = time() - $birthday;
    $age = floor($difference - 662256000);  
    if($age >= 21)
    {
        setcookie("over21",$value, time()+3600*24);
        $_SESSION['over21'] = 1;
        $redirect=isset($_GET['return'])?urldecode($_GET['return']):'./';
        header("location: ".$redirect);
        exit;

    }
    else
    {
        $_SESSION['under21'] = 0;
        header("location: http://google.com");
        exit;
    }
}
?>
<html>
  <head>
    <title>this is xyz.com</title>
  </head>
  <body>
    <form>
      There is a form in here with input's and such to gather day, month and year of birth.
    </form>
  </body>
</html>

如果我将年龄验证片段和引用页面都保留在同一个域中,该脚本会很好地工作。但是我该如何修改它,以便年龄验证页面捕获引用域的完整 URL,而不仅仅是子域?

【问题讨论】:

标签: php http-redirect


【解决方案1】:

所以,请忽略我认为的相同来源的评论,只是看到会话开始代码让我认为您正在尝试跨域共享会话。

你只是在问$_SERVER variables我明白了。

'REQUEST_URI' - 为访问此页面而提供的 URI;例如,'/index.html'。

改用HTTP_HOST 之类的东西。

类似: PHP get domain name

【讨论】:

  • 谢谢@ficuscr,这有帮助。我已经修改了重定向引用页面,因此 else 语句是: $redirect_url=$redirect_url."?return=".$_SERVER['HTTP_HOST'];但现在似乎引用页面的完整 URL 被附加到被引用页面的 URL 上,而不是重定向回来。要查看实际情况,请访问rwd-development.com,它将重定向到 rwd-development2.com(不是此重定向中的 URL 字符串)。一旦您提交了您的年龄,它应该会将您送回 rwd-development.com,但它只是附加现有的 URL。有什么想法吗?再次感谢
  • 起初我以为您在发布年龄验证表单时丢失了 GET 值,但是我看到表单操作 URL 带有 ?return 变量。认为您只需要完全表达位置标头的 URI,添加 http://。例如。 header("Location: http://www.example.com/");
  • 这有效:rwd-development2.com/?return=http://yahoo.com 检查 rwd-development.com 页面代码,认为您正在执行额外的重定向。使用 Fiddler 的 HTTPLiveHeaders 之类的工具可以让您看到发送的标头和任何 302 重定向 - 非常有用的工具。
  • 如何离线联系您?如果你愿意,我很乐意付钱给你来解决这个问题。对于任何了解 PHP 并有权访问代码的人,我确信这应该可以在不到一个小时内修复......可能在几分钟内。如果您在 Twitter 上,请通过句柄“greggrichter”与我联系,我们可以 DM 联系信息。谢谢
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 2010-12-17
  • 2016-11-08
  • 2014-10-26
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多