我已经阅读过使用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>
答案 0 :(得分:1)
一旦页面呈现后你就无法调用PHP(在另一个服务器请求之前不再有PHP),因此任何形式的延迟重定向都不可能。你坚持使用JS或元头刷新(显然,你不能在纯HTML中使用PHP变量,如果你真的想在重定向之前保持页面一段时间,你需要超过0秒。)
答案 1 :(得分:1)
简短回答。否。
PHP标头重定向,<?php header('location: [url]');?>
将为您提供302标头,浏览器将重定向到该标头,但您也不能发送用户将看到的HTML,因为只要浏览器看到标题,它会立即重定向,并且不会显示剩余的内容。
您可以按照TML的建议更改元重定向的超时,但这会使页面一直持续到定时间隔过去,或者您可以创建包含消息的插页式页面,让他们知道重定向发生的时间,可选择点击&#34;此处&#34;现在立即重定向。
答案 2 :(得分:0)
使用所有3个选项,因为它会正常降级。
不确定它是否仍然是一个问题,但有些浏览器不会发送引用标头进行0秒元刷新,而是需要一点时间来设置它。
答案 3 :(得分:-2)
使用0以外的刷新值:
header( "refresh:10;url=$url" );