[英]is there a good practice Redirect with PHP, that allows to display <BODY> content?
我讀過某處的文章,建議不要使用META刷新進行重定向。
據我了解header( "refresh:0;url=$url" );
在PHP中,以及<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>
頁面呈現后,您將無法調用PHP(除非另一個服務器請求,否則將不再提供PHP),因此這種方式的任何形式的延遲重定向都是不可能的。 您被JS困擾或刷新元標頭(顯然,您不能在純HTML中使用PHP變量,並且如果您實際上想在重定向之前將頁面保持一段時間,則需要花費超過0秒的時間)。
簡短的答案。 沒有。
一個PHP標頭重定向, <?php header('location: [url]');?>
將為您提供302標頭,瀏覽器將重定向到該標頭,但是您也無法發送用戶會看到的HTML,因為一旦瀏覽器看到該標頭,它將立即重定向,並且不會顯示其余內容。 您可以按照TML的建議更改元重定向的超時時間,但這將使頁面一直停留到經過定時間隔為止,或者您可以使用您的消息創建一個非頁內頁面,並讓他們知道重定向發生的時間,並可以選擇立即單擊“此處”以立即重定向。
使用所有3個選項,因為它將正常降級。
不知道這是否仍然是一個問題,但是某些瀏覽器不會為0秒元刷新發送引用標頭,而是需要一點時間來設置它。
使用非0的刷新值: header( "refresh:10;url=$url" );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.