在PHP中重定向页面时,路径和查询字符串发生了什么?


When redirecting a page in PHP, what happens to path and query string?

在以下重定向代码中,如果传入流量有路径和查询字符串数据,是自动重传,还是必须捕获并显式重传?

if($_SERVER['SERVER_NAME'] == 'goose.com.au' || $_SERVER['SERVER_NAME'] == 'www.goose.com.au'){
    header( "HTTP/1.1 301 Moved Permanently" ); 
    header( "Location: http://www.geese.com.au" ); 
}

例如,假设流量以

方式进入
http://www.goose.com.au/mother?request=need+new+hat

是否自动重定向到

http://www.geese.com.au/mother?request=need+new+hat

还是我需要捕获细节并在"Location:"中重新指定它们?

如果是后者,当前的最佳实践技术是什么?

必须捕获并重新传输。在这种只替换主机的情况下,使用$_SERVER['REQUEST_URI']应该是安全的。

<?php
if($_SERVER['SERVER_NAME'] == 'goose.com.au' || $_SERVER['SERVER_NAME'] == 'www.goose.com.au'){
    header( "HTTP/1.1 301 Moved Permanently" ); 
    header( "Location: http://www.geese.com.au{$_SERVER['REQUEST_URI']}" ); 
}

不行,你必须自己在header("Location…")

我认为这是最简单的解决方案:

header("Location: http://www.geese.com.au".$_SERVER['REQUEST_URI']);

请查看$_SERVER来了解REQUEST_URI参数。我认为$_SERVER['REQUEST_URI']行为取决于系统配置。