php重定义地址栏url,关于重定向:PHP标头(位置:…):在地址栏中强制更改URL

博主在移动站点上使用PHP进行会话和数据库身份验证时遇到问题。用户登录后,服务器应将其重定向到主页,但URL在地址栏中未更新,导致相对路径资源无法加载。尽管尝试了各种方法,如清理输出缓冲、使用绝对URL和检查代码,问题仍然存在。有人建议可能与jQueryMobile有关,因为关闭data-ajax属性解决了问题。
摘要由CSDN通过智能技术生成

我目前正在使用PHP会话和数据库进行身份验证的移动站点上工作。

我有一个登录页面,其表单在提交时转到server_login.php。 php文件然后创建一些会话数据(存储在$ _SESSION中),并将用户重定向回索引页面:

header("location:../../index.php");

新网页(index.php)正确加载;但是,当标题重定向页面时,地址栏中的URL不会改变;它保留在* http://localhost/php/server/server_login.php*而不是http://localhost/index.php,因此无法加载使用相对路径的所有其他资源。这就好像网页仍然认为它位于/ php / server而不是/。

奇怪的是,我在logout.php上使用标题("location:...")可以正常工作,并通过URL更改成功重定向页面。

我确保在我的* server_login.php *中没有输出头标题重定向(上面只是要检查的mysql调用),我也使用了ob_start()和ob_end_flush()。

是否有任何强制地址栏上的URL更改的方法(因此希望修复相对路径问题)?或者我做错了什么?

P / S:我正在使用jQuery Mobile。

编辑:这是我的重定向代码,不会更改URL:

// some other stuff not shown

$sql ="SELECT * FROM $user_table WHERE email = '$myemail' AND password = '$mypassword'";

$login_result = mysql_query($sql, $connection);

$count = mysql_num_rows($login_result);

if ($count == 1) {

// Successfully verified login information

session_start();

if (!isset($_SESSION['is_logged_in'])) {

$_SESSION['is_logged_in'] = 1;

}

if (!isset($_SESSION['email'])) {

$_SESSION['email'] = $myemail;

}

if (!isset($_SESSION['password'])) {

$_SESSION['password'] = $mypassword;

}

// Register user's name and ID

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {

$row = mysql_fetch_assoc($login_result);

$_SESSION['name'] = $row['name'];

$_SESSION['user_id'] = $row['user_id'];

}

header("Location: http://localhost:8080/meet2eat/index.php");

} else {

// Not logged in. Redirect back to login page

header("Location: http://localhost:8080/meet2eat/php/login.php?err=1");

}

你可以显示你发布数据的代码吗?

尝试改变:

header("Location : blabla")

^

|

(whitespace)

header("Location: blabla")

好吧,如果服务器发送了正确的重定向标头,浏览器会重定向,因此"更改网址"。那么它可能是一个浏览器问题。

我不知道它是否与它有任何关系,但你不应该在位置标题中发送一个相对URL("HTTP / 1.1需要一个绝对URI作为参数?位置:包括方案,主机名和绝对路径,但有些客户接受相对URI。",http://php.net/manual/en/function.header.php),"location"必须大写,如:

header('Location: http://myhost.com/mypage.php');

我知道了。我修复了代码(如上所示),但我仍然遇到相同的URL错误。 :/我已经改为HTTP身份验证,因为我意识到这是我的任务要求的一部分,但我仍然对这个奇怪的'bug'感兴趣。

您是否尝试过不同的浏览器来排除浏览器错误?

请注意WP根目录中常见的"全能".htacces:RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule。 /index.php [L]检查(即通过记录)如果你在重定向后得到两次传递,你的故意重定向(由index.php重新捕获)和另一个后来的那个然后弄错了...实现一个的add_filter( '[pre_] option_siteurl |家');四重执行新的地方可能会帮助你......

根据RFC 2616,HTTP标头不区分大小写。 Location标头不必大写。

在表单元素中添加data-ajax="false"。我使用jquery mobile遇到了同样的问题。

使用jquery mobile时我总是忘记这一点!为我工作;)

我遇到了同样的问题。这个data-ajax=false在我的案例中起作用。

为我工作。

发布表单时遇到了同样的问题。我所做的是关闭数据-ajax。

不知道为什么这个被投票,他是对的。必须与jquery mobile有关。 stackoverflow.com/questions/8403242/

有同样的问题。您只需要在不需要ajax的元素(例如,链接)上添加data-ajax,以便jQuery Mobile不会干扰...即使它不在jQuery Mobile块/表单中。

你可能想休息一下;在你的位置后:

header("HTTP/1.1 301 Moved Permanently");

header('Location:  '.  $YourArrayName["YourURL"]  );

break;

您可以将前两行合并为一个:标题('Location:'。$ YourArrayName ["YourURL"],true,301);

不要使用任何空白区域。我遇到过同样的问题。然后我删除了白色空间,如:

header("location:index.php"); or header('location:index.php');

然后它奏效了。

正如"cfphpflex"建议您在设置标题后添加break;。你也可以回应一些东西,比如echo 'test';。

//注册用户的名称和ID

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {

$row = mysql_fetch_assoc($login_result);

$_SESSION['name'] = $row['name'];

$_SESSION['user_id'] = $row['user_id'];

}

header("Location: http://localhost:8080/meet2eat/index.php");

改成

//注册用户的名称和ID

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {

$row = mysql_fetch_assoc($login_result);

$_SESSION['name'] = $row['name'];

$_SESSION['user_id'] = $row['user_id'];

header("Location: http://localhost:8080/meet2eat/index.php");

}

如果没有找到会话数据,您确定您正在重定向的页面没有重定向吗?那可能是你的问题

也是,总是添加像@Peter O建议的空格。

根据自己的喜好换回家

$home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/home';

header('Location: ' . $home_url);

我为你找到了一个解决方案,如果你的网址是这样的话,为什么不使用Explode呢?

Url-> website.com/test/blog.php

$StringExplo=explode("/",$_SERVER['REQUEST_URI']);

$HeadTo=$StringExplo[0]."/Index.php";

Header("Location:".$HeadTo);

使用

header("Location:index.php"); //这个工作在我的网站上

在php文档中阅读更多关于header()的内容。

其他答案已经说明了这一点

如果它在另一个文件夹中,您可以像header(Location:../index.php)一样使用它

为什么所有这个位置网址?

http://localhost:8080/meet2eat/index.php

你可以使用

index.php

如果php文件在同一个文件夹中,这样更好,因为如果你想托管文件

或更改端口,您将没有问题到达此URL。

问题是,index.php不在同一个文件夹中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值