Przekierowanie 301 raz jeszcze

07 czerwca 2008

Dzisiaj ktoś prosił mnie o pomoc w związku z moim wpisem Przekierowanie 301. Postanowiłem więc uzupełnić informacje :) To będzie krótka notka :P

Może zdarzyć się, że mamy dwie domeny, obie kierują na tą samą stronę jednak nie chcemy aby strona była w dwóch kopiach pod dwoma adresami tylko żeby jeden adres przekierowywał na drugi. Oto gotowa reguła:

CODE:
  1. RewriteEngine On
  2. RewriteCond %{HTTP_HOST} ^(www\.)?domena1.pl(.*) [NC]
  3. RewriteRule ^(.*)$ http://www.domena2.pl/$1 [R=301,L]

Powyższy kod umieszczony w pliku .htaccess przekieruje wszystko co jest pod domena1.pl na domena2.pl :) Bez względu na to czy dodamy przedrostek www.

Wersja dla PHP wygląda tak:

PHP:
  1. <?php
  2. if($_SERVER['HTTP_HOST']=='domena1.pl' || $_SERVER['HTTP_HOST']=='www.domena1.pl')
  3. {
  4. header("HTTP/1.1 301 Moved Permanently");
  5. header("Location: http://www.domena2.pl".$_SERVER['REQUEST_URI']);
  6. header("Connection: close");
  7. }
  8. ?>

Cała sprawa polega na tym, że trzeba sprawdzić jaka domena jest wywołana ponieważ obie domeny kierują na te same pliki. Gdybyśmy wsadzili zwykłe przekierowanie z poprzedniego wpisu na temat przekierowań 301 to po wejściu na domena2.pl przekierowywałoby nas na... domena2.pl :) Wszystko by się zapętliło i mielibyśmy błąd. Zresztą domena1.pl też by nie działała bo najpierw by nas przekierowało na domena2.pl a potem znowu zapętlenie.

Uwaga! (30.01.2008)
Jeżeli interesuje Cię przekierowanie w .htaccess z "bez www" na "z www" lub odwrotnie to nie pożałujesz jeżeli przeczytasz mój wpis na temat uniwersalnego przekierowania 301.

 Dodaj komentarz

29 odpowiedzi dla tego wpisu

  1. MaQ napisał:

    Zawsze można domene umieścić na serwerach DNS i podpiąć do hostingu na którym jest strona ;)

  2. MariuszT napisał:

    Można można ale nie każdy daje radę ;) Ludzie się gubią z tymi DNS’ami, panelami itd. A tu prosta regułka i może jeszcze przy okazji ktoś się czegoś nowego nauczy przy pisaniu reguł w .htaccess.

  3. MaQ napisał:

    Właściwie to masz racje :) Ale nie ma to jak dobry hosting z zainstalowanym C-panel’em ;) Wszystko szybko łatwo etc.

  4. Anonim napisał:

    Ten powyższy kod php wklejamy do każdej strony czy tylko do index.php ?

  5. MariuszT napisał:

    Zależy jak masz zbudowaną stronę. Ogólnie zasada jest taka, że kod aby zadziałał musi być uruchomiony :P To chyba żadne odkrycie :) A więc jeżeli wkleisz to do index.php a ktoś wejdzie do Ciebie na jakąś podstronę gdzie plik index.php nie jest wywoływany to kod wtedy nie zadziała.

    Często strony są tak zbudowane, że gdzieś leży pliczek config.php, który dołączany jest do dowolnie wywołanej strony. Wtedy w nim wystarczy umieścić kod i przekierowanie zadziała wszędzie. Ale powtórzę: wszystko zależy od budowy Twojej strony.

  6. Anonim napisał:

    Ale w podstronie muszę umieścić w skrypcie 301, link do tej samej podstrony tak? Jeśli mam domenę nazwa.pl i chcę aby wszystkie strony wpisane i szukane z przedrostkiem www, były kierowane do promowanej strony bez www, to w każdej podstronie, w kodzie 301 muszę wpisać nie przekierowanie do nazwa.pl tylko do np. nazwa.pl/podstrona.php tak? Bo inaczej otwierając podstronę 301 przekieruje do głównej index.php ?

  7. Anonim napisał:

    Dodawanie 301 w PHP do każdej strony jest konieczne jeśli nie ma się.htaccess tak? Natomiast 301 w .htaccess przekierowuje wszystko co jest oparte na danej domenie? Dobrze rozumuję?:P

  8. MariuszT napisał:

    W pierwszym komentarzu rozumiem, że mówisz o przekierowaniu w PHP? Nie, nie musisz na każdej stronie bawić się w podawanie poprawnej ścieżki. Jest ona “doklejana” automatycznie. Czyli w powyższym kodzie zmieniasz tylko adresy domen i wstawiasz kod gdzie trzeba i działa. Powinno poprawnie przekierowywać wszystkie podstrony.

    W drugim komentarzu masz rację, jest właśnie tak jak myślisz.

  9. Anonim napisał:

    A jak zrobić przekierowanie 301 z adresu np
    (www.)serwer.pl/~uzytkownik/folder/
    na http://www.adres.pl ?

  10. MariuszT napisał:

    Wszystkie potrzebne informacje masz tutaj:

    http://www.tarnaski.eu/blog/przekierowanie-301/
    http://www.tarnaski.eu/blog/pr.....z-jeszcze/

  11. Anonim napisał:

    probowalem tak:

    i tak:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www\.)?serwer.pl/~uzytkownik/folder/(.*) [NC]
    RewriteRule ^(.*)$ http://www.adres.pl/$1 [R=301,L]

    i nie dziala

  12. MariuszT napisał:

    Tak na oko to powinno działać więc trudno powiedzieć co robisz źle. Jeżeli nic nie pomaga to wsadź do ~uzytkownik/folder/ .htaccess o takiej treści:

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

    Wtedy wszystko z tego folderu (i w tych “głębiej”) zostanie przekierowane na nowy adres.

  13. laudi napisał:

    Mam pytanie jak mogę sprawdzić czy to przekierowanie rzeczywiście przenosi “siłę” strony(czy czegoś źle nie wpisałem)
    Kod:
    RewriteCond %{HTTP_HOST} ^(www\.)?shinden-anime.info(.*) [NC]
    RewriteRule ^(.*)$ http://www.anime-shinden.info/$1 [R=301,L]

    jak widać samo przekierowanie z domeny na 2 działa, jednak w jaki sposób sprawdzić czy działa poprawnie?

  14. MariuszT napisał:

    @laudi, przeważnie jest tak, że albo przekierowanie działa poprawnie albo nie działa wcale ;) To Twoje działa tak jak należy. Jak to sprawdzić? Trzeba przeanalizować nagłówki HTTP. Można to zrobić na wiele sposobów.

    Jest sniffer, moim zdaniem najlepszy, Wireshark. Tylko to trochę jak z armatą na muchę bo program ma ogromne możliwości, których Ty nie potrzebujesz.

    Jest wtyczka do Firefox’a, która się nazywa “Live HTTP headers” (niedługo pojawi się na tej stronie mój wpis o wtyczkach i o niej również będzie info). Dzięki niej w łatwy sposób można sprawdzić jak wygląda komunikacja między przeglądarką a serwerem.

    Są również proste narzędzia online, chociażby takie: http://www.seologic.com/webmas.....direct.php

    Pełna nazwa przekierowania 301 brzmi “301 Moved Permanently” i tego powinieneś szukać w nagłówkach.

  15. domi napisał:

    Witam mam problem z przekierowaniem, zrobiłem dwa tygodnie temu przekierowanie z nfszone.eu na nfspolska.pl dzisiaj wpisując np w google frazę nfs shift pojawiają się moje dwie domeny nfszone.eu a na piątej stronie nfspolska.pl … Proszę o pomoc z tym fantem zrobić .

  16. MariuszT napisał:

    Nie pozostaje Ci nic więcej jak czekać. W sumie to w Twoim interesie jest żeby ta sama strona pojawiała się dwukrotnie w wynikach wyszukiwania ;) Więc ja bym nie narzekał. Google w końcu powinno się zorientować co jest grane i wyszukiwarka zareaguje prawidłowo.

  17. domi napisał:

    Dzisiaj mija 4 tydzień przekierowania pozycjonuje nfspolska.pl cały czas jest na 5-6 stronie w google , pod frazami jak wyżej podawałem , pozycja cały czas się utrzymuje na tych stronach lub nawet dalej, wcześniej na nfszone.eu byłem na pierwszych stronach, nie wiem dlaczego moją pozycja nie idzie wyżej, czy to jest normalne ?

  18. Lime napisał:

    Witam.
    Właśnie zmieniłem adres forum w moim serwisie z http://www.polczyno.pl/forum na http://www.forum.polczyno.pl jak teraz z robić, aby w pliku .htaccess przekieować z adresu http://www.polczyno.pl/forum na http://www.forum.polczyno.pl oraz z bez .www na z .www

  19. MariuszT napisał:

    Domi, faktycznie Twoja strona jest daleko a fraza “nfs shift” nie wygląda na trudną. Może popełniłeś jakiś błąd podczas pozycjonowania i to się zbiegło w czasie z przekierowaniem? Samo przekierowanie jest raczej dobrze ustawione, chwilowo mogłoby wywołać taki efekt ale to już trwa trochę za długo… Problem w takich sytuacjach jest taki, że ciężko jednoznacznie wywnioskować co jest przyczyną, zwłaszcza gdy nie wiem jak strona do tej pory była pozycjonowana. Postaraj się w najbliższym czasie zdobyć trochę wartościowych linków do nowego adresu na wyżej wymienioną frazę. Tylko też nie przesadzaj z tym…

    Lime, wystarczająco dużo już napisałem na temat przekierowań, wystarczy poczytać.

  20. Pinio napisał:

    Mam pytanie czy Twój skrypt sprawdza czy użytkownik/robot sprawdza czy jestesmy na tej starej czy nowej domenie i przekierowuje tylko wtedy gdy jestesmy na starej czy zawsze?

  21. MariuszT napisał:

    Wysyłasz komentarz z pytaniem o coś o czym właśnie traktuje powyższy tekst…

  22. Pinio napisał:

    Ok no juz rozumiem. Czy przekierowanie wykonane w php także przekierowuje nie tylko użytkoników ale także roboty wyszukiwarek i czy przenosi zatem całą moc pozycjonowanie jednej domeny na drugą?

    Pozdrawiam i dzięki za odpowiedź!

  23. MariuszT napisał:

    Odróżniaj server side od client side. Nieważne co przekierowuje (PHP, .htaccess czy cos tam jeszcze…), jeżeli przekierowanie ustawione jest po stronie serwera to dotyczy wszystkiego, ludzi, robotów itd. Zresztą znowu Ci się szukać/czytać nie chciało, w innym tekście o 301 jasno napisałem o co w tym wszystkim chodzi…

  24. luki napisał:

    Witam,
    mam małe pytanie związane z zamieszczonym kodem, a dokładniej:
    header(“Connection: close”);
    jaką rolę pełni powyższa linijka w kodzie php?

  25. MariuszT napisał:

    Zamyka połączenie HTTP. Czytałem na ten temat kilka sprzecznych ze sobą informacji. Jedni twierdzą, że to wymóg protokołu, inni, że bez tego IE potrafi się wykrzaczyć itp. Z drugiej strony podobno (nie sprawdzałem) użycie exit powoduje już wysłanie tego nagłówka.

    Tak czy owak warto to stosować jako ostatni nagłówek, tuż przed exit;, chociażby dla przejrzystości.

  26. luki napisał:

    Dziękuję za szybką pomoc, ja też ostatecznie po poszukiwaniach trafiłem na jakąś anglojęzyczną stronę (http://www.webmasterworld.com/forum88/3447.htm) gdzie wyszło na to że to wymóg protokołu

  27. Lechu5 napisał:

    Ok rozumiem że jeżeli posiadam dwie różne domeny które kierują na jedną domene to musimy się posłużyć poniższym schematem:

    RewriteCond %{HTTP_HOST} ^(www\.)?link1.pl(.*) [NC,OR]
    RewriteCond %{HTTP_HOST} ^(www\.)?link2.pl(.*) [NC]
    RewriteRule ^(.*)$ http://www.linkstart.pl/$1 [R=301,L]

    ale co jeśli mamy 4 różne domeny ?
    Jak to zrobić bo już nie mam sił…

  28. MariuszT napisał:

    RewriteCond %{HTTP_HOST} ^(www\.)?link1.pl(.*) [NC,OR]
    RewriteCond %{HTTP_HOST} ^(www\.)?link2.pl(.*) [NC,OR]
    RewriteCond %{HTTP_HOST} ^(www\.)?link3.pl(.*) [NC,OR]
    RewriteCond %{HTTP_HOST} ^(www\.)?link4.pl(.*) [NC]
    RewriteRule ^(.*)$ http://www.linkstart.pl/$1 [R=301,L]

    A teraz odpowiedz sobie czy to było naprawdę takie trudne do wymyślenia/wyszukania…

  29. Lechu5 napisał:

    OK dziekuje za pomoc, wiem ze dla Ciebie to pryszcz ale dla mnie to czarna magia. No faktycznie teraz wyglada banalnie proste

Odpowiedz



Podobne wpisy: