PHP Header()redirect在重定向到新URI之前简要显示旧URI

PHP Header()redirect在重定向到新URI之前简要显示旧URI,php,redirect,http-headers,Php,Redirect,Http Headers,现在,我正在使用一个定制的PHP解决方案来强制将WWW附加到我的脚本URL中,因为我正在使用WordPress.htaccess规则来“清理”index.PHP。强制WWW.htaccess规则与WordPress的index.php清理规则不兼容 使用我的脚本,您可以浏览到“http://scripturl.com/whatever“-然后我的脚本有一个请求URI“/无论什么”的案例,然后为该视图执行一些操作(或编译相应的模板) 在调用任何开关之前,我添加了一系列检查,以确保请求中的HTTP主

现在,我正在使用一个定制的PHP解决方案来强制将WWW附加到我的脚本URL中,因为我正在使用WordPress.htaccess规则来“清理”index.PHP。强制WWW.htaccess规则与WordPress的index.php清理规则不兼容

使用我的脚本,您可以浏览到“http://scripturl.com/whatever“-然后我的脚本有一个请求URI“/无论什么”的案例,然后为该视图执行一些操作(或编译相应的模板)

在调用任何开关之前,我添加了一系列检查,以确保请求中的HTTP主机与脚本中定义的变量中的HTTP主机匹配。这强制要求添加“www”

我的问题是(似乎只在使用IE时)-当我输入url时,说“http://myscript.com/whatever,我的脚本将url转换为http://www.myscript.com/whatever,然后将标头重定向到新URL。但是,如果我将URI请求从“whatever”更改为“somethingelse”,页面将转到“http://www.myscript.com/somethingelse正如预期的那样,在脚本重定向到之前,url中的“whatever”会短暂闪烁http://www.myscript.com/somethingelse“

澄清:从请求“www.myscript.com/sam”开始。请求加载。 将/sam更改为/bob->页面更改为“www.myscript.com/bob”,但/sam在/bob加载之前在url栏中短暂闪烁

只是感觉不“干净”。我觉得我的代码可能在做额外的标题跳转或其他事情。我将其与wordpress进行了对比,进入“www.wordpressurl.com/valid page”,然后将URI更改为“www.wordpressurl.com/other valid page”-我在尝试访问“/另一个有效页面”时,在URL栏中看不到“/有效页面”闪烁,反之亦然

这是我的密码:

// Requested URL built from url in address bar
$requested_url  = is_ssl() ? 'https://' : 'http://';
$requested_url .= $_SERVER['HTTP_HOST'];
$requested_url .= $_SERVER['REQUEST_URI'];

// Correct url built from predefined variable
$correct_url = is_ssl() ? 'https://' : 'http://';

// "Correct" script url
$user_home = @parse_url('http://www.myscript.com');

if ( !empty($user_home['host']) )
  $correct_url .= $user_home['host'];
else {
  die('malformed url');
}

$correct_url .= $_SERVER['REQUEST_URI'];

// If URL in address bar is not proper, perform redirect (preserve URI)
if ($correct_url != $requested_url) {
  hc_redirect($correct_url, 301);
}

// Get page from request, handle accordingly
$page = $_SERVER['REQUEST_URI'];
switch ($page) {
  /* Index */
  case '/':
    echo "Index queried <br />";

    break;
    ...
//从地址栏中的URL生成请求的URL
$requested\u url=is\u ssl()?'https://':'http://';
$requested_url.=$_服务器['HTTP_主机];
$requested\u url.=$\u服务器['REQUEST\u URI'];
//根据预定义变量生成正确的url
$correct\u url=is\u ssl()?'https://':'http://';
//“正确”脚本url
$user\u home=@parse\u url('http://www.myscript.com');
如果(!empty($user_home['host']))
$correct_url.=$user_home['host'];
否则{
die(“格式错误的url”);
}
$correct\u url.=$\u服务器['REQUEST\u URI'];
//如果地址栏中的URL不正确,请执行重定向(保留URI)
如果($correct\u url!=$requested\u url){
hc_重定向($correct_url,301);
}
//从请求中获取页面,并进行相应处理
$page=$\u服务器['REQUEST\u URI'];
交换机($page){
/*索引*/
案例“/”:
回显“查询的索引
”; 打破 ...
为什么在加载新URI(从重定向)之前,旧URI会在导航栏中闪烁?正如我所说,这似乎只发生在IE中-但WordPress没有相同的行为(在IE或任何其他浏览器中),所以我知道我的代码一定有问题,这是一个“额外的步骤”这是在我不知情的情况下发生的。我对PHP有点陌生

有什么想法吗


编辑:hc_redirect和其他使用的函数:

重定向后,脚本继续输出数据,浏览器等待数据,然后才重定向。如果发送重定向头后不需要继续执行脚本,请停止脚本的执行。例如:

// If URL in address bar is not proper, perform redirect (preserve URI)
if ($correct_url != $requested_url) {
    hc_redirect($correct_url, 301);
    die();
}

hc\u redirect
函数是什么样子的?抱歉:…也添加到了主帖子中。其中一些是借用的。对格式表示歉意,刚刚从我的电话中的3个独立文件编译了粘贴。你具体的意思是什么?对php和ssi总体来说还是有点新。还有什么“仍在发送”吗在重定向之后?在重定向之后添加“die()”是执行重定向的“最干净”的方法,还是在代码中有更好的方法/或最佳实践方法来确保在调用重定向之前不再发送数据?另外-刚回到家,添加了“die()”代码位。它仍然在新URI和旧URI之间闪烁。我做错了什么?!D: