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

时间:2011-09-19 06:44:52

标签: php redirect header location

我目前正在使用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");

}

14 个答案:

答案 0 :(得分:62)

尝试更改:

header("Location : blabla")
                ^
                |
           (whitespace)

header("Location: blabla")

答案 1 :(得分:30)

好吧,如果服务器发送了正确的重定向标头,浏览器会重定向,因此“更改网址”。那么它可能是一个浏览器问题。 我不知道它是否与它有任何关系,但你不应该在位置标题中发送一个相对URL(“HTTP / 1.1需要一个绝对URI作为参数»位置:包括方案,主机名和绝对路径,但有些客户接受相对URI。“,http://php.net/manual/en/function.header.php)和”location“必须大写,如:

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

答案 2 :(得分:17)

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

答案 3 :(得分:6)

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

答案 4 :(得分:5)

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

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

然后它奏效了。

答案 5 :(得分:5)

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

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

答案 6 :(得分:1)

如果没有找到会话数据,您确定要重定向的页面是否也没有重定向?这可能是你的问题

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

我为你找到了一个解决方案,如果你的网址类似于

,为什么不使用Explode

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

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

答案 9 :(得分:0)

根据自己的喜好换回家

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

header('Location: ' . $home_url);

答案 10 :(得分:0)

在header末尾添加exit即可

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

答案 11 :(得分:-3)

如果它在另一个文件夹

中,您可以像header(Location:../index.php)一样使用它

答案 12 :(得分:-3)

使用

标题("位置:index.php"); //这项工作在我的网站上

在php文档的header()上阅读更多内容。

答案 13 :(得分:-7)

为什么所有这些位置都是网址?

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

你可以使用

index.php

如果php文件在同一个文件夹中,这样更好,因为如果你想托管文件 或者更改端口,您将无法访问此URL。