Referrerın 301 yönlendirme olup olmadığını belirlemek için nasıl

5 Cevap php

I'm implementing a slug system for my website at the moment. I plan to redirect invalid slugs to the correct on that is stored in the database. E.g.

http://example.com/11/wrong-slug

301 yönlendirme yapmak değilse 11 'slug yanlış-sülük ise db Hit kontrol

http://example.com/11/right-slug

301 algılamak ve geçersiz bir bağlantıyı takip ettiğini kullanıcıyı bilgilendirmek

O yüzden orada imi vb güncellemek için kullanıcı isteyin tercihen PHP kullanarak 301 yönlendirme tanımlamak mümkündür

Thanks, Jamie.

5 Cevap

Çeşitli çözümler akla geliyor:

  1. You could try with get_headers() ah no, it dispatches a request to the URL, which is not what you want

  2. Yine yönlendirme ve aynı makineden yönlendirme için test olduğundan, sadece kullanıcının oturumunda içine yanlış sülük hakkında bir mesaj yazmak ve onu görünümü şablonu işlenir dahaki görüntüleyebilirsiniz. Birçok çerçeveler kolayca bunu izin bir flash messenger bileşeni, örneğin var Zend Framework ile size denetleyici eylem aşağıdaki kodu kullanabilirsiniz

    $flashMessenger = $this->_helper->getHelper('FlashMessenger'); $flashMessenger->addMessage('We did something in the last request');

  3. Bunun yerine yanlış bir sülük bulunduğunda hemen yönlendirme, sadece yanlış sülük hakkında kullanıcı söyler Görünüm şablonu oluşturma ve sonra şablonu yönlendirmek bir meta ya da javascript kullanın. İsterseniz, ayrıca şablona doğru sülük ile düz bir link yazmak istiyorum.

  4. And finally, you could also inject a custom header into the redirect via header(), hangi sonra komut okunabilir. won't work either, because they will be lost once the browser got the redirect from the server

Alternatif olarak (eğer sakıncası yoksa) ve url için bir GET parametresini ekleyin ve PHP script bunun için kontrol edebilir. Gibi bir şey:

http://example.com/11/right-slug?corrected-from=http://example.com/11/wrong-slug

Aynı notu siz oturumu veya çerezleri kullanabilirsiniz, ancak algılama sonra bunları kaldırmak için dikkat etmelisiniz.

Bir çözüm, "yeni" sayfasında $_SERVER['HTTP_REFERER'] kontrol etmek olabilir: ayarlamak ve "eski" sayfasında karşılık eğer kullanıcı yönlendirildi, çünkü muhtemelen - sen isteyebilirsiniz anlamına gelir mesaj görüntülemek.

Bu deneyimini geliştirmek için kullanmak Tamam öyle, ama kritik bir şey için ona güvenmek gerekir - ama Referer kullanıcının tarayıcısı tarafından gönderilen ve engelli veya sahte de olabilir unutmayın.

Bir çalışma çözüm buldu:

  • Oturumu başlatın.
  • $ _SESSION ['INVALID_SLUG'] ekran mesajı sonra unset oturumu varsa, oturumu edin

    başka

  • Veritabanı mesela dan sülük retreive / 11/right-slug
  • Geçerli URI, sözgelimi alın / 11/wrong-slug
  • Farklı set $ _SESSION ['INVALID_SLUG'] ve sayfayı düzeltmek için yönlendirme varsa, karşılaştır

Any feedback? I realise this will not detect a 301 redirect itself more detect a trigger assosiated with the redirect.

Tüm yardım için teşekkürler.

Ben sadece yararlı seçenek çerez kullanmak olduğunu düşünüyorum.

Yanlış slug ile bir URL istendiğinde, sülük olmadan bu URL için bir cookie:

$path = substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/')+1);
setcookie('wrong-slug', 1, 0, $path);

Sonra böyle bir tanımlama varsa test etmek ve mesaj görüntülemek:

if (isset($_COOKIE['wrong-slug'])) {
    echo 'The location of this resource has changed. Please update your bookmarks.';
}