Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个良好的PHP重定向实践,允许显示内容?_Php - Fatal编程技术网

是否有一个良好的PHP重定向实践,允许显示内容?

是否有一个良好的PHP重定向实践,允许显示内容?,php,Php,我在某个地方读到,使用元刷新进行重定向不是推荐的做法 据我所知,标题刷新:0;url=$url;在PHP中, 作为HTML中的元标记, 两者都被视为元刷新,将返回此标头: HTTP/1.x 200 OK ... Refresh: 0;url=$url 假设我不想使用JS重定向,是否可以使用另一个推荐的实践重定向,例如301或302,同时仍在重定向页面中运行以下元素,例如以下消息和特定脚本 <?php $url = "could-not-get-a-foo-parameter-at-all

我在某个地方读到,使用元刷新进行重定向不是推荐的做法

据我所知,标题刷新:0;url=$url;在PHP中, 作为HTML中的元标记, 两者都被视为元刷新,将返回此标头:

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>

一旦页面在另一个服务器请求之前不再呈现PHP,就不能调用PHP,因此任何形式的延迟重定向都不可能以这种方式进行。显然,你不能在纯HTML中使用PHP变量,如果你真的想在重定向前保持页面运行一段时间,你需要超过0秒的时间。使用除0以外的刷新值: 标题刷新:10;url=$url

简短的回答。没有

PHP头重定向将为您提供302头,浏览器将重定向到该头,但您也无法发送用户将看到的HTML,因为一旦浏览器看到该头,它将立即重定向,并且不会显示其余内容。
您可以按照TML的建议更改元重定向的超时时间,但这将使页面保持在已过的时间间隔之前,或者您可以使用消息创建一个中间页面,并让他们知道重定向发生的时间,现在可以选择单击此处立即重定向。

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

元刷新。与禁用的JS一起工作 JS位置重定向。允许比元刷新、snappy更多的控制 静态HTML锚。为那些希望内容比刷新更快的用户提供备份

不确定这是否仍然是一个问题,但有些浏览器在0秒元刷新时不会发送referer头,而是需要一点时间来设置它。

否,发出HTTP 3xx重定向时,没有理由显示正文内容,因为用户代理浏览器将立即请求位置提供的下一个资源:header.Hey@rockyraw!很高兴看到你又发布了几乎相同的问题。@JayBlanchard我不同意,这是一个类似的代码,但实际上不是我说的几乎相同的问题。¯_ツ_/“”“您的答案显然是错误的。@TML告诉我更多信息,您可以在呈现您正在查看的页面后调用PHP?您不需要在呈现您正在查看的页面后调用PHP来获得所需的效果。请参阅我的答案。问题中的所有内容都可以使用“0”以外的刷新值来完成。正文内容将一直显示到超时为止。@TML OP显然知道这一点。让我拼一下:是否可以使用另一种推荐的做法。。。另一个了解了?对于这一点,我回答:你被JS或元头刷新卡住了……告诉OP为什么刷新值必须不同。因为这不是问题的真正主题的答案,这是关于推荐的替代重定向方法,我想这是一个评论?你能解释一下为什么不是0吗?如果你想显示主体并运行一些javascript,那么给出一个非零的时间就可以了。“0”是UA在遵循刷新URL之前将等待的秒数。@TML我正在寻找一种替代重定向方法,该方法也可以执行此操作。当前的0间隔确实显示消息并执行脚本。我相信OP希望页面运行一段时间。@Shomz我不希望重定向页面运行一段时间,仅约一秒钟,足以显示重定向消息并执行跟踪JS脚本什么是间隙页面?这不正是我在这里做的吗?@rockyraw是的,我明白,我的意思是暂时不重定向。我不想暗示很长一段时间,抱歉。1问题是,出于我自己的原因,我不愿意在页面的源代码中的任何地方使用url,这意味着我唯一的选择可能是只在页眉中发送url。2你的意思是,为了安全措施,我应该始终使用至少1秒作为间隔?3.你说的更多的控制和快捷是什么意思?1没有URL,浏览器就不知道去哪里。无论采用何种方法,URL都将始终向客户端公开。2这是一个老错误,1秒是修复时间,不确定当前状态,但可以在其中放一些时间。3 JS为您提供了一个在客户端上使用URL的机会,并在您决定执行重定向时立即做出响应,提供了比元刷新更多的功能,但元刷新在禁用JS时有效。1浏览器将知道是否通过发送的标题而不是从页面源获取信息。。不我的意思是,这正是我目前的代码所做的。2所以你说的是0秒JS r
edirect的工作速度比0秒的元刷新快吗?这对我的访客有多重要?出于好奇,因为只有一个重定向可以发生,你建议哪一个作为回退JS/META,它应该设置在什么时间间隔?嗯,不确定元刷新vrs JS和谁赢了。。。页面的块加载可能会看到元刷新等待,直到至少标题完全加载,JS会在加载块后立即触发,很可能这一切都取决于它们的位置,以及首先完全加载到DOM中的位置。。。。我只是将所有方法结合使用。