簡體   English   中英

有沒有使用PHP重定向的好習慣,可以顯示 <BODY> 內容?

[英]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個選項,因為它將正常降級。

  1. 元刷新。 (禁用JS時可以使用)
  2. JS位置重定向。 (比元刷新,活潑的方法具有更多的控制權)
  3. 靜態HTML錨點。 (對於那些想要內容比刷新速度更快的用戶進行備份)

不知道這是否仍然是一個問題,但是某些瀏覽器不會為0秒元刷新發送引用標頭,而是需要一點時間來設置它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM