簡體   English   中英

如何知道PHP中URL重定向到哪個頁面?

[英]How to know which page is the URL redirecting to in PHP?

如果我有一個URL(例如http://www.foo.com/alink.pl?page=2 ),我想確定是否將我重定向到另一個鏈接。 我還想知道最終到達的網址(例如http://www.foo.com/other_link.pl )。

我想知道如何在PHP中做到這一點

謝謝大家的幫助 :)

(更多信息:

我想擁有一個稱為dosItDirect($ url)的函數,如果返回true,則返回重定向到的URL,如果返回false,則返回傳遞的URL

如果您使用的是cURL,則可以執行curl_getinfo ($ch, CURLINFO_EFFECTIVE_URL)處所述: http : curl_getinfo ($ch, CURLINFO_EFFECTIVE_URL)

例:

<?php
    $ch = curl_init ('http://www.foo.com/alink.pl?page=2');
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

    curl_exec ($ch);

    if (!curl_errno ($ch))
        $url = curl_getinfo ($ch, CURLINFO_EFFECTIVE_URL);

    curl_close ($ch);

    echo $url;
?>

您需要對上述網址執行http請求,並檢查您獲得的響應標頭。 301302響應表示它是重定向。 重定向URL包含在響應標頭中 ,其外觀類似於Location: <url>

更新:手冊提供了一個有用的示例 ,我從中整理了這個示例 ,它似乎可以工作:

<?php  
function isRedirectUrl($url) {
    $redirectCodes = array(301, 302, 303, 307);

    if ($fp = fopen($url, 'r')) {
        $meta = stream_get_meta_data($fp);

        list($http_version, $code, $message) = explode(' ', $meta['wrapper_data'][0], 3);

        if (in_array(intval($code), $redirectCodes)) {
            foreach ($meta['wrapper_data'] as $header) {
                list($name, $value) = explode(':', $header, 2);

                if ($name == 'Location') {
                    return trim($value);
                }
            }    
        }

        fclose($fp);
    }

    return false;
}

function getCanonicalUrl($url) {
    $ret = $url;
    while ($test = isRedirectUrl($ret)) {
        if ($test) {
            $ret = $test;
        }
    }

    return $ret;
}

var_dump(getCanonicalUrl('http://<url to test>'));
?>

這並不容易。

這不是不可能,但是很難。 這些是您可以進行重定向的方法:

標頭重定向。

在這里,您需要輸入“ gimmiemypage.php”,而不是發送“ 200-OK”作為狀態,而是發送“ 30?-Redirected”標頭(其中?是1或2)。 這真的很容易檢測,因為卷曲會告訴您。 歡呼。

HTML刷新重定向。

在這里,您在解析后使用和一秒鍾,瀏覽器會向前轉發您。

這很難檢測到,因為您必須專門查找元標頭,因此您需要解析任意HTML( 不要使用正則表達式,否則會很不好 )以找到這些標記。 它們應該始終位於,但是那些古怪的karazee網站開發人員可能會將其隱藏。

然后是Javascript重定向。 在不評估javascript的情況下查找這些內容幾乎是不可能的。 您可以使用多種不同的方法來重定向JS中的人員,但是可以使用解析器來捕獲人員。 但是,由於這是JS,您最終需要閱讀和評估頁面上可以看到的所有JS,隨附的JS,以及所有包含...的內容。

我的建議是嘗試找到一種並不意味着您需要了解所有重定向的方法,因為這是一個很深的陷阱。

暫無
暫無

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

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