PHP标题(位置:…):强制地址栏中的URL更改

我目前正在使用带有数据库的PHP会话进行身份validation的移动网站上工作。 我有一个login页面,表单上提交到server_login.php 。 PHP文件然后创build一些会话数据(存储在$ _SESSION中),并将用户redirect回索引页面:

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

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

奇怪的是,我在logout.php中使用header(“location:…”),并且使用URL更改成功redirect页面。

我已经确定,在我的* server_login.php *中没有输出在头redirect之前(上面只是mysql调用检查),我也使用了ob_start()和ob_end_flush()。

有没有强制地址栏上的URL的任何方法改变(并因此希望解决相对path问题)? 还是我做错了什么?

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

编辑:这是我的代码redirect,不改变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") 

那么,如果服务器发送一个正确的redirect头,浏览器redirect,因此“更改url”。 那么这可能是一个浏览器问题。 我不知道它是否与它有任何关系,但是你不应该在位置头部发送一个相对的URL(“HTTP / 1.1需要一个绝对的URI作为参数到»位置:包括scheme,主机名和绝对path,但有些客户端接受相对URI“, http://php.net/manual/en/function.header.php )和”location“必须大写,如:

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

在你的表单元素中添加data-ajax="false" 。 我有使用jQuery手机相同的问题。

我发布表单时遇到同样的问题。 我所做的就是closures数据ajax。

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

 header(location:index.php); 

然后它的工作。

你可能想rest一下; 在你的位置之后:

 header("HTTP/1.1 301 Moved Permanently"); header('Location: '. $YourArrayName["YourURL"] ); break; 

如果没有find会话数据,您确定您正在redirect的页面也没有redirect吗? 这可能是你的问题

还有,总是添加像@Peter Obuild议的空白。

//注册用户的名字和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"); } 

我得到了一个解决scheme,为什么不使用爆炸如果你的url是类似的

url – > website.com/test/blog.php

 $StringExplo=explode("/",$_SERVER['REQUEST_URI']); $HeadTo=$StringExplo[0]."/Index.php"; Header("Location: ".$HeadTo); 

只要改变你的喜好回家

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

正如“cfphpflex”build议你可以添加break; 设置标题后。 你也可以回显一些东西,比如echo 'test';

如果它在另一个文件夹中,你应该使用它像header(Location:../index.php)

使用

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

阅读更多的头文件()在PHP文档。

为什么所有这个位置的url?

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

你可以使用

 index.php 

如果PHP文件在同一个文件夹,这是更好的,因为如果你想主持的文件或更改端口,你将没有问题,达到这个URL。