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ć.
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.
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 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]
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';);
}
?>
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.
Dziękujemy za zwrócenie uwagi, podane przez nas przekierowanie jest zaczerpnięte z publikacji internetowych, ale rzeczywiście może nie jest optymalne.
Przydatne informacje. Tego szukałem :)
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ć?
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.
dla mnie też dziwne, bo już działa, może mimo ze pucowałem historie bez przerwy coś zostawało w pamięci…
No, czasem tak to jest z tymi cache’ami itp.
A czy można przekierować bloga
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.
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
Moim zdaniem lepsza jest druga wersja.
Serdecznie dziękuję- przydało się :)
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.
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.
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.
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
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!
Nie ma za co :)
Również pozdrawiam
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
Pol, Ty nie pomyliłeś się? To nie działa u mnie
Czy znacznik /$1 ma być dodany po wpisaniu nowego adresu ? To jest podsumowanie – informacja o zakończeniu ?
To nie jest podsumowanie to chyba raczej zmienna oznaczająca wszystkie podstrony, pliki, katalogi pod domeną… ale nie jestem ekspertem
czy można zrobić przekierowanie 301 z adresu bloga na bloggerze?
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.
Źle mi przekierowuje podstrony z domeny na wizytówkę w Zumi.
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
Spróbuj może tak:
RewriteRule ^pl/n/2$ nowy-tytul-strony [L]
inne przekierowania w tym .htaccess działają?
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
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.
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.