如何使用PHP重定向到同一页?
例如,我的本地web地址是:
http://localhost/myweb/index.php
我该如何在我的网站内重定向到另一个页面,比如说:
header("Location: clients.php");
我知道这可能是不正确的,但是我真的需要放整个东西吗?如果以后不是http://localhost/
怎么办?
有没有办法做到这样的事情?此外,在处理完一些代码后,我尝试使用重定向。可以这样做吗?
如何使用PHP重定向到同一页?
例如,我的本地web地址是:
http://localhost/myweb/index.php
我该如何在我的网站内重定向到另一个页面,比如说:
header("Location: clients.php");
我知道这可能是不正确的,但是我真的需要放整个东西吗?如果以后不是http://localhost/
怎么办?
有没有办法做到这样的事情?此外,在处理完一些代码后,我尝试使用重定向。可以这样做吗?
我在重新加载同一页面时首选的方法是使用 $_SERVER['PHP_SELF']。
header('Location: '.$_SERVER['PHP_SELF']);
die;
在调用header()函数后,不要忘记使用die或exit终止程序执行。
编辑:(感谢@RafaelBarros)
如果查询字符串也是必需的,请使用
header('Location:'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);
die;
编辑:(感谢@HugoDelsing)
当htaccess URL操作生效时,$_SERVER ['PHP_SELF']的值可能会将您带到错误的位置。在这种情况下,正确的URL数据将在$_SERVER ['REQUEST_URI']
中进行重定向,可以像下面Nabil的答案那样:
header("Location: http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
exit;
如果需要,您还可以使用 $_SERVER[REQUEST_URI] 将正确的值分配给 $_SERVER['PHP_SELF']
。 如果您经常使用重定向函数并且不想更改它,则可以使用此方法。 只需在请求处理程序中设置正确的值:
$_SERVER['PHP_SELF'] = 'https://sample.com/controller/etc';
header('location:'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']); exit;
。 - Rafael Barrosheader('Location:'。 $ _SERVER ['PHP_SELF']。'?'. str_replace("&","&",$ _SERVER ['QUERY_STRING'])); die;
- houssamPHP_SELF
有一个函数,而REQUEST_URI
也有一个函数。我永远不会更改服务器变量,因为在将来跟踪该值为什么不符合预期将非常困难。 - Hugo Delsing另一个优雅的例子是
header("Location: http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
exit;
echo
输出该字符串,而不是 header
。如果输出正确,则可能存在其他问题(例如,头必须是页面上的第一个输出)。 - Nicole为了真正实现通用性,我正在使用这个:
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'
|| $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
header('Location: '.$protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit;
我喜欢$_SERVER['REQUEST_URI']
,因为它尊重mod_rewrite和/或任何GET变量。
如果您不关心查询参数,可以采用快速简单的方法:
header("location: ./");
下面这条简单的线路可以正常工作:
header("Location: ?");
header('Location: '.$_SERVER['PHP_SELF']);
也可以工作
header("Location: ");
(没有任何值),它会重定向到当前页面。我在本地使用得很正确:
header('0');