Subskrybuj:   Posty   |   Komentarze
RSS

Poprawne przekierowanie 301 – Jak zrobić przekierowanie 301

« starsze | nowsze »

Przekierowanie 301 (Moved Permanently) służy do przekierowywania z jednego adresu internetowego na drugi. Jest bardzo często wykorzystywane przez webmasterów i pozycjonerów ponieważ jest poprawnie interpretowane zarówno przez przeglądarki, jak i roboty wyszukiwarek internetowych takich jak Google. Najczęściej przekierowanie 301 wykorzystuje się podczas przenoszenia serwisu z jednej domeny na drugą. Dzięki temu nie tracimy linków prowadzących do starej domeny, a robot wyszukiwarki jest przekierowywany na nową domenę i przenosi Page Rank.

Jednak nie jest to jedyne zastosowanie przekierowania 301. Często jest również wykorzystywane podczas optymalizacji witryny do ustawiania przekierowania z adresu z www na bez www i odwrotnie. Robi się to w celu przekierowania linków prowadzących do różnych wersji adres (www/bez www) na jeden przez nas wybrany. Powinno się na początku zdecydować jaki adres będziemy promować czy z www, czy bez i do wybranej wersji zamieszczać linki. Jednak ludzie mogą zamieszczać linki w obydwu wersjach więc warto takie przekierowanie ustawić.

Jak zrobić poprawne przekierowanie 301?

Najlepiej użyć do tego pliku .htaccess, który wgrywa się do katalogu głównego na serwerze i stworzyć w nim następujący kod:

RewriteEngine On
RewriteRule ^(.*)$ http://www.nowy-adres.pl/$1 [R=301,L]

Nie wszystkie serwery obsługują plik .htaccess, większość darmowych serwerów nie obsługuje tego modułu. W takim wypadku możemy wykonać przekierowanie 301 w php.

Przekierowanie 301 w PHP

Uwaga! W przypadku kopiowania i wklejania kodu php należy sprawdzić poprawność znaków typu   ’   .


< ?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.domena.pl'.$_SERVER['REQUEST_URI']);
header('Connection: close');
?>

Przekierowanie 301 www i bez www

Przekierowanie z www na bez www w .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^domena.com [NC]
RewriteRule ^(.*)$ http://domena.com%{REQUEST_URI} [R=301,L]

Przekierowanie z wersji bez www na wersję z www w .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.domena.com [NC]
RewriteRule ^(.*)$ http://www.domena.com%{REQUEST_URI} [R=301,L]

Przekierowanie domeny głównej na subdomenę lub z bez www na www

Poniższy kod można użyć zarówno jako alternatywny dla tego podanego powyżej jak i do przekierowywania z domeny głównej na subdomenę. W przypadku przekierowania z wersji bez www na wersję z www należy zamienić w kodzie wyrażenie subdomena na www.

Dokonywane w .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domena.pl
RewriteRule ^(.*)$ http://subdomena.domena.pl/$1 [R=301,L]

w php:

< ?php
if (substr($_SERVER['HTTP_HOST'], 0, 3) !=='subdomena') {
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://subdomena.domena.pl'.$_SERVER['REQUEST_URI']);
header('Connection: close';);
}
?>

Znalazłeś literówkę? Daj nam o tym znać!

Opinie i Komentarze na Forum: 30

  1. Grzesiu Powiedział:

    W przekierowaniu z domeny głównej na subdomenę za pomocą pliku .htaccess jest pewna nieścisłość. To polecenie nie dokona przekierowania w momencie wpisania adresu http://www.domena.pl. Całość powinna wyglądać następująco:
    RewriteCond %{HTTP_HOST} ^domena.pl [OR]
    RewriteCond %{HTTP_HOST} ^www.domena.pl
    RewriteRule ^(.*)$ http://subdomena.domena.pl/$1 [R=301,L]

    Można oczywiście zostawić pojedynczy warunek mając wyżej zadeklarowane przekierowanie „z www” do „bez www” ale działanie takie jest wysoce nieefektywne (serwer wykona 2 oddzielne przekierowania 301) a w przypadku znacznego obciążenia serwera może nawet zablokować wyświetlenie serwisu z błędem 500.

    Należy dbać o optymalizację instrukcji zawartych w pliku .htaccess.

  2. admin Powiedział:

    Dziękujemy za zwrócenie uwagi, podane przez nas przekierowanie jest zaczerpnięte z publikacji internetowych, ale rzeczywiście może nie jest optymalne.

  3. katko Powiedział:

    Przydatne informacje. Tego szukałem :)

  4. michalekd Powiedział:

    u mnie pod chrome działa prawidłowo, tj. przekierowuje z http://www.pergolaa.pl/ na pergolaa.pl/, ale pod IE to nie działa, może trzeba coś dodać?

  5. admin Powiedział:

    hmm, a to jakaś stara wersja IE, dziwne, że Ci nie działa tylko w IE. Sprawdziłem twoją stronę w FF i u siebie w IE i działa normalnie.

  6. michalekd Powiedział:

    dla mnie też dziwne, bo już działa, może mimo ze pucowałem historie bez przerwy coś zostawało w pamięci…

  7. admin Powiedział:

    No, czasem tak to jest z tymi cache’ami itp.

  8. Arecki Powiedział:

    A czy można przekierować bloga

  9. admin Powiedział:

    Jeżeli masz dostęp do ftp żeby edytować pliki to można przez htcaccess jeżeli obsługuje albo przez ftp, ale w przypadku Bloog’a pewnie nie masz dostępu.

  10. Pol Powiedział:

    Witam,

    Lepiej wpisać tak:

    RewriteEngine On RewriteCond %{HTTP_HOST} ^www.stara.pl
    RewriteRule ^(.*)$ http://www.nowa.pl/$1 [R=301,L]

    czy tak jak tutaj podajecie:

    RewriteEngine On
    RewriteRule ^(.*)$ http://www.nowy-adres.pl/$1 [R=301,L]

    Pozdrawiam

  11. admin Powiedział:

    Moim zdaniem lepsza jest druga wersja.

  12. Jarek Powiedział:

    Serdecznie dziękuję- przydało się :)

  13. Ariel Powiedział:

    Witam, proszę o o poradę:
    Do tej pory jedna z moich stron funkcjonowała pod adresem „z www”. Po zmianie jej całej zawartości – po przerzuceniu plików za pomocą programu Dreamweaver – nastąpiła samoistna zmiana adresu na taki „bez www”. Jak mam powrócić do adresu „z”www”, co może być przyczyną zaistniałej sytuacji??
    Po dołączeniu pliku .htaccess wyświetla mi się błąd serwera 500.
    Proszę o pomoc.

  14. admin Powiedział:

    Widocznie twój serwer nie obsługuje .htaccess – darmowy? Możesz zrobić przekierowanie 301 też w php, ale jeżeli dobrze zrozumiałem to teraz przekierowuje z wersji „z www” na wersję „bez www” to nie możesz zrobić drugiego zwrotnego przekierowania bo się zapętlą. Najprawdopodobniej gdzieś skrypt przekierowuje – musisz znaleźć gdzie.

  15. Ariel Powiedział:

    Dziękuję Ci Adminie za wskazówki.
    Nie, serwer nie jest darmowy, mam go w nazwa.pl. Sama stronka jest prościutka – jeden plik zaledwie, który przekierowuje na inną stronę (po prostu blokuję ten adres, by go ktoś inny o moim nazwisku nie podłapał. To jest annakarolak.com i on właśnie teraz jak widzisz widnieje bez tego www. Mnie po prostu zastanawia co się mogło stać, bo ta stronka od zawsze widniała w sieci z www, a teraz po wywaleniu starej zawartości z niej i wprowadzeniu tej nowej zawartości – po raz pierwszy za pomocą programu Dreamweaver – to się stało, zniknęło w tajemniczy sposób” www”.
    A Ty Adminie mówisz chyba o skrypcie, który mógłby być w kodzie, tak? Otóż w tym kodzie nie mam żadnych skryptów, raptem jest tło i dwa linki.

    Mógłbyś mi jeszcze coś pomóc w tej sprawie? Byłabym wdzięczna.

  16. admin Powiedział:

    Ok, jak podałaś adres to ja już wszystko wiem :)

    Otóż nie masz ustawionego żadnego przekierowania 301 obie wersje zarówno z www jak i bez www są dostępne – to co jest zaindeksowane zależy od linków jakie prowadzą do tej domeny i pewnie masz i takie z www, i takie bez.

    Jeżeli .htaccess Ci nie działa to możesz sobie zrobić to przekierowanie w php, wtedy z czasem robot Google Ci to przeindeksuje.

    Możesz też założyć sobie konto w Google i tam masz Narzędzia dla Webmasterów – dodajesz tam swoją domenę, potem weryfikujesz, żeby móc cokolwiek przy niej zmieniać. Następnie masz tam opcje „Ustawienia preferowanej domeny” i wybierasz sobie po prostu pożądaną wersję.

    Pozdrawiam

  17. Ariel Powiedział:

    No to ja założę jeszcze dziś konto w Google i zadziałam tam według Twych wskazówek.
    Bardzo dziękuję Ci Adminie za pomoc!
    (gdybym jeszcze coś nie wiedziała to jeszcze zgłoszę się po poradę do Ciebie)

    Pozdrawiam Cię serdecznie!

  18. admin Powiedział:

    Nie ma za co :)
    Również pozdrawiam

  19. Krzysiek Powiedział:

    Witam,

    a jak zrobić przekierowanie katalogu na subdomenę. Czyli
    tak aby www. comfoline.pl/blog/ było kierowane na blog.comfoline.pl/
    jeśli przekierowanie jest zrobione prawidłowo to po wpisaniu pierwszego
    adresu w przeglądarce po załadowaniu powinien on się zmienić na prawidłowy url?

    Pozdrawiam

  20. Oase Powiedział:

    Pol, Ty nie pomyliłeś się? To nie działa u mnie

  21. aa Powiedział:

    Czy znacznik /$1 ma być dodany po wpisaniu nowego adresu ? To jest podsumowanie – informacja o zakończeniu ?

  22. Ja Powiedział:

    To nie jest podsumowanie to chyba raczej zmienna oznaczająca wszystkie podstrony, pliki, katalogi pod domeną… ale nie jestem ekspertem

  23. paweł Powiedział:

    czy można zrobić przekierowanie 301 z adresu bloga na bloggerze?

  24. admin Powiedział:

    Z tego co wiem, to na bloggerze można ustawić swoją domenę, więc pewnie tak to działa automatycznie, że jak przenosisz na swoją domenę to skrypt bloggera ustawia przekierowanie. Przetestuj.

  25. cantr Powiedział:

    Źle mi przekierowuje podstrony z domeny na wizytówkę w Zumi.

  26. Adam Powiedział:

    Witam,
    mam prosty problem a nie mogę sobie z nim poradzić.
    Proszę o pomoc.
    Chciałbym zrobić przekierowanie 301 z adresu:
    domenaxyz.pl/pl/n/2
    na adres:
    domenaxyz.pl/nowy-tytul-strony
    Będę wdzięczny za podanie konkretnego wpisu do pliku .htaccess.
    Dziękuję.

    Trochę mnie wstyd ale siedzę już nad tym problemem dłuższy czas
    przewertowałem setki przykładów
    i dalej nie wiem jak działa RewriteRule (nie potrafię tego zrozumieć)
    próbuję:
    RewriteRule ^pl/n/2$ http://domenaxyz.pl/nowy-tytul-strony [R=302, L]
    ale nic z tego
    Jeszcze raz proszę o pomoc

  27. admin Powiedział:

    Spróbuj może tak:

    RewriteRule ^pl/n/2$ nowy-tytul-strony [L]

    inne przekierowania w tym .htaccess działają?

  28. Adam Powiedział:

    witam
    dziękuję za pomoc
    bezpośrednio pod: RewriteEngine On
    wstawiłem: RewriteRule ^pl/n/2$ /nowa-nazwa-strony [R=301,L]
    i zadziałało
    jeszcze raz dziękuję za pomoc

  29. Evelina Powiedział:

    Witam ja w temacie zupełnie zielona jestem. Program w którym robię strony pokazuje mi taki index.php

    <?php
    require_once("../res/x5engine.php");
    require_once("checkaccess.php");
    if ($logged)
    {
    require_once("../res/x5settings.php");
    if (isset($imSettings['blog']) && $imSettings['blog'] != FALSE)
    {
    header("Location: blog.php");
    exit;
    } else if (isset($imSettings['guestbooks']) && count($imSettings['guestbooks'])) {
    header("Location: guestbook.php");
    exit;
    } else {
    header("Location: website_test.php");
    }
    }

    // End of file index.php

    Dodam ze każda moja strona zrobiona w tym programie taki index.php mi pokazuje. Chciałabym zrobić przekierowanie na inna domenę tak aby pozostawić linki prowadzące do starej domeny. Proszę o pomoc kompletnie nie wiem czy ten skrypt na przekierowanie wpisać jako dodatkowy i tam wskazać domenę do przekierowania czy edytować istniejący skrypt? Jak się do tego zabrać? Jak to powinno wyglądać? Jeszcze jedno pytanie – przypuśćmy, że obie domeny, czyli stara i nowa będą miały to samo przekierowanie, czy one obie będą działać poprawnie? Z góry dziękuję za wszystkie odpowiedzi.

  30. admin Powiedział:

    Witaj, jeżeli masz dostęp do plików na serwerze to proponuję edytować plik .htaccess i spróbować zastosować metodę opisaną na początku w tym artykule. Jeżeli nie da się w .htaccess to w index.php spróbuj zastosować tą drugą metodę opartą o php. Stwórz czysty plik index.php i wstaw tam ten podany w artykule kod.

    Co do drugiego pytania to nie wiem czy dobrze rozumiem. Ogólnie jeżeli dwie domeny A i B będą przekierowywały na domenę C to będzie to działać poprawnie. Z kolei jeżeli domana A będzie przekierowywała do domeny B, a domena B będzie przekierowywała do domeny A to powstanie pętla i nic się nie otworzy.

Dodaj komentarz lub opinię na forum: