PHP标题(位置:…):强制更改地址栏中的URL
我目前正在一个移动站点上工作,该站点使用带有数据库的PHP会话进行身份验证。 我有一个登录页面,表单在提交时转到server\u login.php。然后,php文件创建一些会话数据(存储在$_session中),并将用户重定向回索引页:PHP标题(位置:…):强制更改地址栏中的URL,php,redirect,header,location,Php,Redirect,Header,Location,我目前正在一个移动站点上工作,该站点使用带有数据库的PHP会话进行身份验证。 我有一个登录页面,表单在提交时转到server\u login.php。然后,php文件创建一些会话数据(存储在$_session中),并将用户重定向回索引页: header("location:../../index.php"); 新网页(index.php)正确加载;但是,当标题重定向页面时,地址栏上的URL不会改变;它停留在*http://localhost/php/server/server_login.ph
header("location:../../index.php");
新网页(index.php)正确加载;但是,当标题重定向页面时,地址栏上的URL不会改变;它停留在*http://localhost/php/server/server_login.php*而不是http://localhost/index.php 因此,我所有其他使用相对路径的资源都无法加载。这就好像网页仍然认为它位于/php/server而不是/
奇怪的是,我在logout.php中对header(“location:…”)的另一种用法可以工作,并通过URL更改成功重定向页面
我已经确保在头重定向之前,我的*server\u login.php*中没有输出(上面只是要检查的mysql调用),我还使用了ob\u start()和ob\u end\u 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");
}
如果服务器发送了正确的重定向头,浏览器就会重定向,从而“更改url”。那可能是浏览器的问题。 我不知道这是否与此有关,但您不应该在location标头中发送相对url(“HTTP/1.1要求将绝对URI作为参数发送到»location:包括方案、主机名和绝对路径,但一些客户端接受相对URI。”,),并且“location”必须大写,如:
header('Location: http://myhost.com/mypage.php');
我在发布表单时也遇到了同样的问题。我所做的是关闭数据ajax 尝试更改:
header("Location : blabla")
^
|
(whitespace)
到
在表单元素中添加
数据ajax=“false”
。我在使用jquery mobile时也遇到了同样的问题。为什么要使用这些位置url?
http://localhost:8080/meet2eat/index.php
你可以用
index.php
如果php文件在同一个文件夹中,这会更好,因为如果您想托管这些文件
或者更改端口,您访问此URL不会有任何问题。您应该像
标题(位置:../index.php)
一样使用它,如果它位于另一个文件夹中,则不要使用任何空白。我也有同样的问题。然后我删除了空白,如:
header("location:index.php"); or header('location:index.php');
然后它工作了。如果找不到会话数据,您确定要重定向的页面也没有重定向吗?那可能是你的问题
也是的,总是像@Peter O建议的那样添加空格。我为您找到了一个解决方案,如果您的url类似于 Url->website.com/test/blog.php
$StringExplo=explode("/",$_SERVER['REQUEST_URI']);
$HeadTo=$StringExplo[0]."/Index.php";
Header("Location: ".$HeadTo);
使用
标题(“Location:index.php”)//这项工作在我的网站
阅读php文档的更多内容。只需根据您的喜好更改主页即可
$home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/home';
header('Location: ' . $home_url);
//注册用户名和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");
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");
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");
}
你可能想休息一下;在您的位置之后:
header("HTTP/1.1 301 Moved Permanently");
header('Location: '. $YourArrayName["YourURL"] );
break;
正如“cfphpflex”所建议的,您可以添加
break设置标题后的代码>。您还可以回显某些内容,例如echo'test'代码>你能告诉代码你是如何发布数据的吗?我明白了。我已经修复了代码(如上所示),但仍然收到相同的URL错误。:/我已经改为HTTP身份验证,因为我意识到这是我分配要求的一部分,但我仍然对这个奇怪的“错误”感兴趣。请注意WP的根目录中常见的那种“一网打尽”。htacces:RewriteCond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则/index.php[L]检查(即通过日志记录)如果在重定向后通过了两次,那么您的有意重定向(被index.php重新捕获)和另一个随后的重定向会出错。。。实现一个add_过滤器(“[pre_uu]选项_siteurl | home”);do Fourple强制执行新位置可能会对您有所帮助…根据RFC 2616,HTTP头不区分大小写。位置标题不必大写。不知道为什么会被否决,他是对的。必须使用jquery mobile。有同样的问题。您只需要在不需要ajax的元素上添加数据ajax(例如链接),这样jQuery Mobile就不会干扰is。。。即使它不在jQuery Mobile块/表单中。问题是,index.php
不在同一个文件夹中。使用jQuery Mobile时,我总是忘记这一点!为我工作;)我也有同样的问题。这个data ajax=false
在我的例子中有效。您可以将前两行合并为一行:header('Location:'。$youraryname[“YourURL”],true,301);