如何在PHP中重定向到同一页面
Posted
技术标签:
【中文标题】如何在PHP中重定向到同一页面【英文标题】:How to redirect to the same page in PHP 【发布时间】:2011-12-29 04:20:57 【问题描述】:如何使用 php 重定向到同一页面?
比如我在本地的网址是:
http://localhost/myweb/index.php
如何在我的网站内重定向到另一个页面,例如:
header("Location: clients.php");
我知道这可能是错误的,但我真的需要把整个东西都放上去吗?如果以后不是http://localhost/
怎么办?
有没有办法做这样的事情?另外,我有很多代码,然后在处理完一些代码后最后......我正在尝试使用它进行重定向。可以吗?
【问题讨论】:
How to make a redirect in PHP? 的可能重复项 这和“同一页”有什么关系? 对于“同一页面”,我在这里找到了最可靠的答案:***.com/questions/4221116/php-refresh-current-page 【参考方案1】:有许多不同的$_SERVER
(docs) 属性可以返回有关当前页面的信息,但我的首选方法是使用$_SERVER['HTTP_HOST']
:
header("Location: " . "http://" . $_SERVER['HTTP_HOST'] . $location);
其中$location
是域之后的路径,以/
开头。
【讨论】:
我不知道为什么它没有重定向,也许我做错了? $location= '/index.php'; header("位置:" . "http://" . $_SERVER['HTTP_HOST'] .$location); 为了调试,只需输出带有echo
而不是header
的字符串。如果它是正确的,那么其他地方是错误的(例如,标题必须是页面上的第一个输出。)【参考方案2】:
我首选的重新加载同一页面的方法是 $_SERVER['PHP_SELF']
header('Location: '.$_SERVER['PHP_SELF']);
die;
别忘了在你的 header() 之后死掉或退出;
编辑:(感谢@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;
。
@RafaelBarros 谢谢你,我已经编辑了我的答案以包含你的建议。
如果您使用 .htaccess 将 URL 重定向到单个文件,这将重定向到该单个文件,而不是浏览器中的 URL。
我对 & 符号有疑问。解决方案:header('Location:'. $_SERVER['PHP_SELF'].'?'. str_replace("&","&",$_SERVER['QUERY_STRING']));die;
@HugoDelsing 如果您要重定向到请求处理程序,您可以设置$_SERVER['PHP_SELF'] = 'whatever you want';
我通常在请求处理程序本身中执行此操作,并从一些手动配置值和$_SERVER['REQUEST_URI']
(在每个/通过正则表达式之间拆分)。这让我可以不用担心从上面使用我的重定向代码,还可以让我对友好的 url 格式进行精细控制。因此,当 htaccess url 操作正在进行时,请使用 $_SERVER['REQUEST_URI']
,如果需要,您可以使用它为 $_SERVER['PHP_SELF'] 分配正确的值。【参考方案3】:
另一个优雅的是
header("Location: http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
exit;
【讨论】:
【参考方案4】:为了真正通用,我正在使用这个:
$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 变量。
来自https://***.com/a/2886224/947370的https检测
【讨论】:
这个很有帮助。【参考方案5】:header('Location: '.$_SERVER['PHP_SELF']);
也可以
【讨论】:
【参考方案6】:我在 localhost 中正确使用:
header('0');
【讨论】:
这不会重新加载页面。【参考方案7】:如果您不关心查询参数,这是一种快速简便的方法:
header("location: ./");
【讨论】:
【参考方案8】:我刚刚尝试使用header("Location: ");
(没有任何值),它重定向到当前页面。
【讨论】:
【参考方案9】:下面的简单行就可以了:
header("Location: ?");
【讨论】:
以上是关于如何在PHP中重定向到同一页面的主要内容,如果未能解决你的问题,请参考以下文章