是否有一个很好的做法,使用PHP重定向,允许显示内容?

时间:2014-09-24 20:43:30

标签: php

我已经阅读过使用META刷新进行重定向的地方,这不是推荐的做法。

据我所知,PHP中的header( "refresh:0;url=$url" );, 和<meta http-equiv="refresh" content="0;url=$url/" />作为HTML中的META标记, 都被视为META刷新,它将返回此标题:

HTTP/1.x 200 OK
...
Refresh: 0;url=$url

假设我不想使用JS重定向,是否可以使用其他推荐的练习重定向,例如301或302,同时仍然在重定向页面中运行以下元素,例如以下消息和某个脚本?

<?php
$url = "could-not-get-a-foo-parameter-at-all-error-monitoring-page.html"; 

if(isset($_POST['foo'])){

    switch ($_POST['foo']) {

    case "a":
        $url = "http://www.aaa.com/";
        break;

    case "b":
        $url = "http://www.bbb.com/";
        break;

    default:
        $url = "foo-parameter-exists-but-is-wrong-error-monitoring-page.html";
        break;
    }
}

header( "refresh:0;url=$url" );

?>  
<!doctype html>
<html>
<head>

<style>
.message {
   color:blue;
}
</style>
</head>
<body>
<div class="message">Redirecting, Please hold on...</div>
<script>
something
</script>

4 个答案:

答案 0 :(得分:1)

一旦页面呈现后你就无法调用PHP(在另一个服务器请求之前不再有PHP),因此任何形式的延迟重定向都不可能。你坚持使用JS或元头刷新(显然,你不能在纯HTML中使用PHP变量,如果你真的想在重定向之前保持页面一段时间,你需要超过0秒。)

答案 1 :(得分:1)

简短回答。否。

PHP标头重定向,<?php header('location: [url]');?>将为您提供302标头,浏览器将重定向到该标头,但您也不能发送用户将看到的HTML,因为只要浏览器看到标题,它会立即重定向,并且不会显示剩余的内容。 您可以按照TML的建议更改元重定向的超时,但这会使页面一直持续到定时间隔过去,或者您可以创建包含消息的插页式页面,让他们知道重定向发生的时间,可选择点击&#34;此处&#34;现在立即重定向。

答案 2 :(得分:0)

使用所有3个选项,因为它会正常降级。

  1. 元刷新。 (适用于JS禁用)
  2. JS位置重定向。 (允许更多控制而不是元刷新,snappy)
  3. 静态HTML锚点。 (备份那些想要比刷新更快的内容的人)
  4. 不确定它是否仍然是一个问题,但有些浏览器不会发送引用标头进行0秒元刷新,而是需要一点时间来设置它。

答案 3 :(得分:-2)

使用0以外的刷新值: header( "refresh:10;url=$url" );