如何在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中重定向到同一页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 php 中重定向/调度? [复制]

如何在 Rails 中重定向到 404?

如何在 JSF 2.0 中重定向

如何在控制器操作中重定向到 aspx 页面

如何在java中重定向到外部URL

如何在typo3 V10的extbase控制器中重定向到404页面