php get html meta tags




如何在PHP中進行重定向? (18)

1.使用header函數和exit()

<?php 
     header('Location: target-page.php');
     exit();
?>

但是如果你使用頭函數,那麼有時你會得到“像頭已發送的警告”的解決方案,在發送頭文件之前不會回顯或打印,或者你可以簡單地在頭函數之後使用die()exit()

2.沒有標題

<?php 
    echo "<script>location.href='target-page.php';</script>";
?>

在這裡你不會遇到任何問題

3.使用頭函數ob_start()ob_end_flush()

<?php
ob_start(); //this should be first line of your page
header('Location: target-page.php');
ob_end_flush(); //this should be last line of your page
?>

是否可以通過使用PHP將用戶重定向到其他頁面?

假設用戶訪問www.example.com/page.php ,我想將它們重定向到www.example.com/index.php ,但如何在不使用元刷新的情況下這樣做? 可能?

這甚至可以保護我的網頁免受未經授權的使用


header( 'Location: http://www.yoursite.com/new_page.html' );


你可以更新php: header


使用header()函數發送HTTP Location標題

header('Location: '.$newURL);

與一些人認為相反, die()與重定向無關。 只有當你想重定向而不是正常執行時才使用它。

使用example.php:

<?php 
header('Location: static.html');
$fh = fopen('/tmp/track.txt','a');
fwrite($fh, $_SERVER['REMOTE_ADDR'].' '.date('c')."\n");
fclose($fh);
?>

結果或3次執行:

[email protected]:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00

恢復 - 強制die() / exit()是一些都市傳奇,與實際的PHP沒有任何關係。 與客戶端“尊重” Location:標題無關。 無論使用哪個客戶端,發送頭文件都不會停止PHP執行。


使用echo從PHP輸出JavaScript,它將完成這項工作。

echo '<script type="text/javascript">
           window.location = "http://www.google.com/"
      </script>';

除非您緩衝頁面輸出,然後再檢查重定向條件,否則您無法在PHP中真正做到這一點。 這可能太麻煩了。 請記住,標題是從頁面發送的第一件東西。 大部分重定向通常在頁面稍後需要。 為此,您必須緩衝頁面的所有輸出,並稍後檢查重定向條件。 此時,您可以重定向頁面用戶標題()或簡單地回顯緩衝的輸出。

有關緩衝的更多信息(優點)

什麼是輸出緩衝?


像其他人說的那樣,發送位置標題:

header( "Location: http://www.mywebsite.com/otherpage.php" );

但是在將任何其他輸出發送到瀏覽器之前,您需要執行此操作。

此外,如果您要使用此功能阻止未經身份驗證的用戶訪問特定頁面(請注意,有些用戶代理thedailywtf.com/Articles/WellIntentioned-Destruction.aspx並繼續在當前頁面上進行操作,因此您需要死掉)發送後。


可能來不及回答這個問題。 不過,這是我的想法:

恕我直言,重新引導傳入請求的最佳方式是使用位置標題,即可

<?php
header("Location: /index.php");
?>

一旦執行了此語句,並且輸出已發出,瀏覽器將開始重新指導用戶。 但是,確保在發送頭文件之前沒有任何輸出(任何echo / var_dump),否則會導致錯誤。

雖然這是一種快速和骯髒的方式來實現原來的要求,但它最終會變成SEO災難,因為這種重新定向總是被解釋為301/302重定向,因此搜索引擎將會始終將您的索引頁面視為重定向頁面,而不是登錄頁面/主頁面。 因此它會影響網站的SEO設置。


在語義網的前夜,正確性是需要考慮的事情。 不幸的是,PHP的“位置”標題仍然使用HTTP 302重定向代碼,嚴格來說,它並不是最好的重定向代碼。 它應該使用的是303

W3C非常友好地提及 303-header與“許多HTTP / 1.1之前的用戶代理”不兼容,這相當於目前沒有使用瀏覽器。 所以,302是一個遺物,不應該被使用。

...或者你可以忽略它,就像其他人一樣......



您可以嘗試使用php頭函數來進行重定向。 您將需要設置輸出緩衝區,以便您的瀏覽器不會向屏幕發出重定向警告。

ob_start();
header("Location: ".$website);
ob_end_flush();

我已經回答了這個問題,但我會再次這樣做,因為在此期間,我已經了解到,如果您在CLI中運行(重定向不能發生,因此不應該exit() ),或者您的網絡服務器將PHP作為(F)CGI運行(它需要先前設置的Status標頭才能正確重定向)。

function Redirect($url, $code = 302)
{
    if (strncmp('cli', PHP_SAPI, 3) !== 0)
    {
        if (headers_sent() !== true)
        {
            if (strlen(session_id()) > 0) // if using sessions
            {
                session_regenerate_id(true); // avoids session fixation attacks
                session_write_close(); // avoids having sessions lock other requests
            }

            if (strncmp('cgi', PHP_SAPI, 3) === 0)
            {
                header(sprintf('Status: %03u', $code), true, $code);
            }

            header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
        }

        exit();
    }
}

我還處理了支持不同HTTP重定向代碼( 301307 )的問題,因為它在我之前的回答的評論中提到,下面是描述:

  • 301 - 永久移動
  • 302 - 找到
  • 303 - 見其他
  • 307 - 臨時重定向(HTTP / 1.1)

是的,你可以使用header()函數,

header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();

最好的做法是在header()函數之後立即調用exit()函數,以避免執行下面的代碼。

根據文檔,必須在發送任何實際輸出之前調用header()


有多種方法可以做到這一點,但如果你喜歡php ,我建議使用header()函數。

基本上

$your_target_url = “www.example.com/index.php”;
header(“Location : $your_target_url”);
exit();

如果你想把它踢出一個檔次,最好在功能中使用它,這樣你就可以在其中添加認證和其他檢查元件。

讓我們通過檢查用戶的級別來嘗試。

因此,假設您已將用戶的權限級別存儲在名為u_auth的會話中。

function.php

<?php

function authRedirect($get_auth_level, $required_level, $if_fail_link = “www.example.com/index.php”){
    if($get_auth_level != $required_level){
        header(location : $if_fail_link);
        return false;
        exit();
    }else{
        return true;
    }
 }

 . . . 

然後,您將為每個想要驗證的頁面調用該函數。

就像在page.php或任何其他頁面一樣。

<?php

// page.php

require “function.php”

authRedirect($_SESSION[‘u_auth’], 5);  // redirects to www.example.com/index.php if the user isn’t auth level 5
authRedirect($_SESSION[‘u_auth’], 4);  // redirects to www.example.com/index.php if the user isn’t auth level 4
authRedirect($_SESSION[‘u_auth’], 2, “www.someotherplace.com/somepage.php”);  // redirects to www.someotherplace.com/somepage.php if the user isn’t auth level 2


. . . 

我希望你會發現一些有用的內容

參考;


現有答案總結加我自己的兩分錢:

1.基本答案

您可以使用header()函數發送新的HTTP標頭,但必須在HTML或文本之前將其發送到瀏覽器(例如​​,在<!DOCTYPE ...>聲明之前)。

header('Location: '.$newURL);

2.重要細節

die()exit()

header("Location: http://example.com/myOtherPage.php");
die();

為什麼你應該使用die()exit()thedailywtf.com/Articles/WellIntentioned-Destruction.aspx

絕對網址

該網址必須是絕對的。 請參閱RFC 2616 。 但在大多數情況下,相對URL也會被接受。

狀態碼

PHP的“位置”標題仍然使用HTTP 302重定向代碼,但這不是你應該使用的。 您應該考慮301 (永久重定向)或303 (其他)。

注意: W3C提到 303-header與“許多pre-HTTP / 1.1用戶代理不兼容,目前使用的瀏覽器都是HTTP / 1.1用戶代理,對於許多其他用戶代理(如蜘蛛和機器人)來說並不是這樣。

3.文件

HTTP頭和PHP中的header()函數

4.替代品

您可以使用http_redirect($url);的替代方法http_redirect($url); 需要安裝PECL包pecl

5.助手功能

此功能不包含303狀態碼:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);

    exit();
}

Redirect('http://example.com/', false);

這更加靈活:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6.解決方法

正如前面提到的header()只在寫出任何內容之前重定向。 如果調用內部HTML輸出,它們通常會失敗。 然後,您可以使用HTML標頭解決方法(不是很專業!),如:

 <meta http-equiv="refresh" content="0;url=finalpage.html">

或甚至JavaScript重定向。

window.location.replace("http://example.com/");

這些答案中的大部分都忘記了一個非常重要的步驟!

header("Location: myOtherPage.php");
die();

離開這個重要的第二條線可能會看到你最終在thedailywtf.com/Articles/WellIntentioned-Destruction.aspx 。 問題在於瀏覽器不必尊重頁面返回的標題,因此在頁眉被忽略的情況下,頁面的其餘部分將在沒有重定向的情況下執行。


<?php
$url = "targetpage"
Function redirect$url(){
   If (headers_sent()) == false{
      Echo '<script>window.location.href="' . $url . '";</script>';
}}
?>

<?php header('Location: another-php-file.php'); exit(); ?>

或者如果你已經打開php標籤,使用這個:

header('Location: another-php-file.php'); exit();

您也可以重定向到外部頁面,例如:

header('Location: https://www.google.com'); exit();

確保你包含exit()include die()


function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

Redirect('http://www.google.com/', false);

不要忘了死()/退出()!







redirect