Nasıl PHP yönlendirme URL hangi sayfa bilmek?

3 Cevap

Ben bir URL varsa (örneğin http://www.foo.com/alink.pl?page=2), ben başka bir linke yönlendiriliyorsunuz ediyorsam belirlemek istiyor. Ben de son URL'sini bilmek istiyorum (örn. http://www.foo.com/other_link.pl).

PHP bunu nasıl bilmek istiyorum

Yardımlarınız için hepinize teşekkür ederim :)

(Daha fazla bilgi:

Ben doğru eğer o yönlendirir url döndürür doesItDirect ($ url) denir bir işlevi olmasını istiyorsanız, ve geçti aynı url döndürür false

)

3 Cevap

Sen sözü url bir http-istek yapmak ve almak yanıt başlıklarını kontrol etmek gerekir. A 301 veya 302 yanıtı bir yönlendirme anlamına gelir. Yönlendirme url response headers dahildir ve Location: <url> gibi görünecektir.

Güncelleme: manuel sağlanan yararlı bir example, ben birlikte bu koymak hangi, iş gibi görünüyor:

<?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>'));
?>

http://sg.php.net/manual/en/function.curl-getinfo.php: Eğer cURL kullanarak yapıyorsanız, bir curl_getinfo ($ch, CURLINFO_EFFECTIVE_URL) burada belgelenen olarak yapabilirsiniz

Örnek:

<?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;
?>

Bu kolay değil.

Bu imkansız değil, ama oldukça lanetlemek zor. Bunlar bir yönlendirme yapabilirsiniz yolu vardır:

Yeniden yönlendirme header.

Durumu gibi, bir "? 30 - yönlendirildi" gönderir - Bu "gimmiemypage.php" sormak yerine "Tamam 200" gönderme nerede başlık (1 veya 2 nerede?). Kıvırmak size söyleyecektir, çünkü bu, tespit etmek gerçekten çok kolay. Hurra.

HTML Yenile Yönlendirme.

Eğer tarayıcı itibaren size iletir, bu ayrıştırma sonra ve bir ikinci kullanın yerdir.

Özellikle meta başlıklarına bakmak zorunda çünkü bu tespit etmek zordur, bu nedenle (Do Not Use Regexes for this, That Would Be Bad) bu etiketler bulmak için arbitary HTML ayrıştırmak gerekir. Onlar should her zaman olacak, ancak bu tuhaf karazee webdevelopers bunları gizlemek olabilir.

Sonra Javascript yönlendirmeleri vardır. Ne olacağını görmek için javascript değerlendirerek olmadan bu bulmak neredeyse imkansız. Orada JS insanları yönlendirebilir, çeşitli farklı yolları vardır, ama sen bir çözümleyici olan yakalamak olabilir. Bu JS çünkü Ancak, tüm sayfada görebilirsiniz JS ve dahil JS ve içeren bir şey okumak ve değerlendirmek gerek bitireceğiz ...

O düşmek için çok derin bir kuyu var çünkü benim tavsiyem, tüm yönlendirmeler hakkında bilmeniz gerekir anlamına gelmez bir yol denemek ve bulmak.