如何在PHP中重定向到同一页面

use*_*502 32 php redirect

如何使用PHP重定向到同一页面?

例如,我的本地网址是:

http://localhost/myweb/index.php
Run Code Online (Sandbox Code Playgroud)

如何在我的网站内重定向到另一个页面,说:

header("Location: clients.php");
Run Code Online (Sandbox Code Playgroud)

我知道这可能是错的,但我真的需要把整个事情搞定吗?如果不是以后怎么http://localhost/办?

有没有办法做这样的事情?此外,我有很多代码,然后在完成处理一些代码后...我试图重定向使用它.这可以吗?

Syn*_*ror 77

我重新加载同一页面的首选方法是$ _SERVER ['PHP_SELF']

header('Location: '.$_SERVER['PHP_SELF']);
die;
Run Code Online (Sandbox Code Playgroud)

不要忘记在标题后退出或退出();

编辑:(谢谢@RafaelBarros)

如果查询字符串也是必需的,请使用

header('Location:'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);
die;
Run Code Online (Sandbox Code Playgroud)

编辑:(感谢@HugoDelsing)

当htaccess url操作正在播放时,$ _SERVER ['PHP_SELF']的值可能会将您带到错误的位置.在这种情况下,正确的网址数据将$_SERVER['REQUEST_URI']用于您的重定向,这看起来像Nabil的答案如下:

header("Location: http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
exit;
Run Code Online (Sandbox Code Playgroud)

如果需要,您还可以使用$ _SERVER [REQUEST_URI]为其分配正确的值$_SERVER['PHP_SELF'].如果您大量使用重定向功能并且您不想更改它,这可能会有所帮助.只需在请求处理程序中设置正确的值,如下所示:

$_SERVER['PHP_SELF'] = 'https://sample.com/controller/etc';
Run Code Online (Sandbox Code Playgroud)

  • 如果查询字符串也是必需的,请使用`header('location:'.$ $ SERVER ['PHP_SELF'].'?'.$ _ SERVER ['QUERY_STRING']); 退出;`. (6认同)
  • 如果使用.htaccess将URL重定向到单个文件,则会重定向到该单个文件,而不是浏览器中的URL. (3认同)
  • @RafaelBarros感谢您,我编辑了我的答案以包含您的建议. (2认同)

Nab*_*imi 19

另一个优雅的是

header("Location: http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
exit;
Run Code Online (Sandbox Code Playgroud)


Nic*_*ole 12

有许多不同的$_SERVER(docs)属性可以返回有关当前页面的信息,但我首选的方法是使用$_SERVER['HTTP_HOST']:

header("Location: " . "http://" . $_SERVER['HTTP_HOST'] . $location);
Run Code Online (Sandbox Code Playgroud)

$location域之后的路径在哪里,以/.开头.


squ*_*ndy 8

为了真正普及,我正在使用这个:

$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' 
    || $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
header('Location: '.$protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit;
Run Code Online (Sandbox Code Playgroud)

我喜欢$_SERVER['REQUEST_URI']因为它尊重mod_rewrite和/或任何GET变量.

/sf/answers/202035711/进行 https检测


dig*_*out 5

如果您不关心查询参数,这是一种快速简单的方法:

header("location: ./");
Run Code Online (Sandbox Code Playgroud)