【问题标题】:php dynamic url redirection using header location and sessions使用标头位置和会话的 php 动态 url 重定向
【发布时间】:2012-02-07 00:01:07
【问题描述】:

我正试图找出最好的方法来做到这一点,但可能完全是想多了。

我需要用户在获取页面内容之前提交他们的电子邮件。

此时他们不需要确认,只需提交任何电子邮件即可。所以我创建了一个带有电子邮件字段的简单表单,并使用“POST”将其提交到我的流程页面

但是,我需要在提交电子邮件后将他们重定向到动态网址。

所以我希望能够在我想要重定向到的页面的 url 中放置一个变量,如下所示:

http://myurl.com/provide_email.php?url=newpage.html

在页面 provide_email.php 我放了:

<?php
session_start();

session_register('url');

$_SESSION['url'] = $_GET['url'];

?>

并在同一页面上回显输出(只是为了测试它)。因此,在同一页面上显示:

newpage.html

然后在我的 process.php 页面上放:

<?php

session_start();

$dynamicurl = $_GET['url'];

if(empty($_GET))
    echo "No GET variables";
else
    print_r($_GET); 


$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'folder1/folder2/';
header("Location: http://$host$uri/$extra/".$dynamicurl);


?>

但是,每次我提交页面时,它都不会重定向到带有 $dynamicurl 变量的 url。

我也试过了:

header("Location: http://$host$uri/$extra/$dynamicurl");

我做错了什么?

url 必须是动态的,因为我从 cms 创建页面,最终用户将访问。我只是希望他们必须先提交一封电子邮件,然后才能访问每个独特的页面。

【问题讨论】:

  • $dynamicurl = $_GET['url']; 为什么?您试图将数据保存到会话变量中,为什么要尝试从查询中获取某些内容? session_register 自 php 5.3 起已弃用
  • 您测试过http://$host$uri/$extra/".$dynamicurl 的实际结果吗?
  • $dynamicurl = $_GET['url'];这句话有什么用。我没有发现从查询字符串中传递了一些东西在 GET 数组中

标签: php session redirect


【解决方案1】:

您的调试语句是问题所在:

if(empty($_GET))
    echo "No GET variables";
else
    print_r($_GET); 

将开始输出,因此无法兑现以下header()。我确定你的日志中满是warning: Cannot set header, output already started

使用

if(empty($_GET))
    $message "No GET variables";
else
    $message=var_export($_GET,true); 

echo $message;

header() 语句之后。

【讨论】:

  • 我放了调试语句只是为了看看出了什么问题,但是是的......它说......警告:无法设置标题,输出已经开始。但是,如果没有 if 语句,它将重定向但仅重定向到目录:http://myurl.com/folder1/folder2/ 并且永远不会重定向到结束 URL (newpage.html) 如果有更好的方法来做到这一点,我很开放。我只是不知道其他方法。
  • 它告诉我:解析错误:语法错误,第 9 行 /home/webserver/public_html/test_site/process2.php 中的意外 T_CONSTANT_ENCAPSED_STRING 但第 9 行是我从您的帖子第 9 行和第 11 行复制的代码是否突出显示为错误:if(empty($_GET)) $message "No GET variables"; else $message=var_export($_GET,true));
  • 我找到了答案.. 但新用户显然无法回答他们的问题。 [stackoverflow.com/questions/722836/… 这似乎有效...我完全删除了调试并将代码更改为: header("Location: http://$host$uri/$extra/"."$_SESSION[url]" ); [1]:stackoverflow.com/questions/722836/…
  • 我编辑了我的答案:第 9 行有一个多余的括号。
猜你喜欢
  • 2012-03-11
  • 2013-02-09
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
相关资源
最近更新 更多