Uniwersalne przekierowanie 301

30 stycznia 2009

Na temat przekierowań 301 napisałem już sporo (tu i tu) ale tym razem mam coś bardzo smakowitego ;)

Przekierowania 301 najczęściej używa się gdy chcemy aby nasza strona zawsze pojawiała się z lub bez "www". Oczywiście podawałem już rozwiązania tego problemu w .htaccess (patrz linki wyżej) ale miały one jedną wadę: trzeba było wpisać adres swojej witryny. A może da się prościej?

Owszem, da się, chociaż ja nie znalazłem rozwiązania w google. W internecie jest mnóstwo identycznych informacji opisujących standardowe przekierowania ale nikt nie pokusił się o stworzenie jednego uniwersalnego.

Oto one:

Przekierowanie z "bez www" na "z www":

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

Przekierowanie z "www" na "bez www":

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

I już :) Nie trzeba więcej się martwić o wpisywanie całego adresu do regułki za każdym razem gdy robimy przekierowanie. Wszystkie przekierowania załatwisz teraz prostą metodą kopiuj wklej i nie musisz mnożyć regułek jeżeli do jednego serwera kieruje kilka domen.

EDIT
Właśnie znalazłem na drupal.org dyskusję na temat uniwersalnego przekierowania. Odzyskuję wiarę w internet hehe ;) Ich rozwiązanie jest prawie identyczne z moim. Jest jedna nic nieznacząca różnica w pierwszym przekierowaniu. Ale jeżeli miałbym się czepiać to uważam, że moje jest lepsze :D

Dodaj komentarz

77 odpowiedzi dla tego wpisu

  1. Anmato napisał:

    Jesteś specem od 301 hehe

  2. Anmato napisał:

    I teraz poprosimy o ten kod w PHP

  3. MariuszT napisał:

    Pisane z głowy ale powinno być ok :)

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

  4. Jacek napisał:

    DZięki przed chwilą wstawiłem przekierowanie na mojej www! Pozdawiam

  5. karpiu napisał:

    Witam.

    Ja mam pytanie związane z tematem.
    Przekierowania działa mi poprawnie po za kilkoma wyjątkami.
    Są to przekierowania dla wyświetlanych zdjęć. (adres zdjęcia jest przekazywany do PHP, jest tam ono podpisywane i dopiera wtedy wyświetlane) W treści strony pojawiają się adresy do zdjęć które maja zostać przetłumaczone i podmienione przez rewriterule. I kicha, w logu widzę informacje o podmianie treści przekierowania, poprawny wynik przekierowania który po wpisaniu w przeglądarce daje pożądany wynik.
    Niestety na docelowej stronie gdzie powinny się wyświetlić zdjęcia, nic się nie dzieje. Wygląda to tak jak sam apache nie pozwalał na podmianę adresów w treści strony. Tłumaczone są tylko te adresy które docelowo maja się wyświetlić w polu adresu przeglądarki.
    Ma ktoś może jakiś pomysł co może odpowiadać za taka sytuacje ?

  6. MariuszT napisał:

    Trudno powiedzieć, nie wszystko zrozumiałem. Może zdjęcia ładują Ci się z cache przeglądarki? Prześledź snifferem wszystkie nagłówki i kolejne przekierowania. Polecam do tego celu użyć Firebug’a, który ma wbudowanego przyjemnego snifferka śledzącego tylko to co się dzieje w przeglądarce.

    A tak w ogóle to mam nadzieję, że nie „podpisujesz” (cokolwiek to znaczy) zdjęć za każdym razem gdy je wywołujesz?

  7. virusxd napisał:

    Ja wole moje przekierowanie za pomocą CNAME, bez plików, bez zbędnego pisania i zawsze działa :)
    Po prostu zamiast wpisać ścieżkę do katalogu ze stroną wpisałem drugi adres z www.

  8. MariuszT napisał:

    Nie każdy ma takie możliwości.

  9. Luzak napisał:

    Dzięki za info.
    Mam jeszcze pytanie odnośnie przekierowania ze strony głównej/index.php na stronę główną. Chcę uniknąć indeksowania dwóch stron i nie wiem co wstawić w .htaccess.

    Będę wdzięczny za pomoc.

    Pozdrawiam

  10. Luzak napisał:

    Mam małe pytanko. Szukam rozwiązania dla problemu przekierowania ze starego sklepu na nowy sklep. Oba sklepy pod oscommerce. Stary sklep na subdomenie a nowy na domenie głównej. Stary sklep mocno rozpowszechniony w sieci. Myślę o przekierowaniu 301 ale nie wiem jak skonstruować takie przekierowanie. Niestety w sklepie zmieniły się nietylko domeny ale również nazwy produktów.
    Oto przykład:
    Stary sklep
    http://www.sklep.domena.pl/blender-sb4-p-1811.html
    Nowy sklep
    http://www.domena.pl/blender-sb4-p-84.html

    Czy można stworzyć jakiś „myk”, który będzie szukał po podobnych nazwach?

    Będę wdzięczny za pomoc.

  11. MariuszT napisał:

    Hej Luzak :)

    Odpowiedź na pytanie numer 1:

    RewriteEngine On
    RewriteRule ^index.php$ / [R=301,L]

    To tak na szybko napisane, nie testowałem ale powinno działać :) Gdyby jednak coś było nie tak to pisz, potestuję :)

    Odpowiedź na pytanie numer 2:

    Przekierowanie z subdomeny na nową domenę zrobisz bez problemu (zalecam lekturę moich wpisów na tym blogu o 301 i powinieneś dać sobie spokojnie radę :) ).

    Co do produktów to obawiam się, że .htaccess Ci tu nie pomoże. Jeżeli nazwy/numery ID produktów się zmieniły to jedyny sensowny sposób to zabawa z PHP. Czyli zapominasz całkowicie o .htaccess i przy uruchomieniu strony w PHP sprawdzasz czy istnieje dany produkt. Jeżeli nie istnieje to go szukasz i jak znajdziesz to robisz przekierowanie. Dla optymalizacji najlepiej zrobić osobną tabelę gdzie będą zapisane informacje o produktach, ich stary i nowy adres. W ten sposób łatwiejsze będzie wyszukiwanie, oszczędniejsze niż szukanie na ślepo po całej tabeli z produktami. Niestety prościej się nie da i gotowej regułki nie mogę Ci podać.

  12. Luzak napisał:

    Witaj. Dzięki za pomoc. Mam jeszcze jedno pytanie. Próbuje wrzuciś do .htaccess ręczne przekierowanie 301 na nowy adres przynajmniej dla najważnieszych stron dla których zmieniła się nie tylko domena ale i link. Jednak opierając się na kodzie

    RewriteRule ^kanaly-rss/?$ /kanaly-informacyjne/ [R=301,L]

    pozwala zrobić mi to tylko dla jednego adresu. Gdy wpisuję drugą taką samą linię dla innego linku strona mi sie wywala. Jak to zrobić i czy wogóle jest to możliwe?

    Pozdrawiam
    Luzak

  13. MariuszT napisał:

    „Gdy wpisuję drugą taką samą linię dla innego linku” – wytłumacz dokładniej co robisz.

    Pamiętaj, że możesz używać wyrażeń regularnych i załatwić jedną linijką przekierowanie wielu stron o ile do wszystkich da się zastosować pojedynczą regułę.

  14. Luzak napisał:

    Już rozwiązałem ten problem – miałem błąd i stąd to zamieszanie.

    Zasadniczo mam do Ciebie jeszcze jedno pytanie.

    Pisałeś coś takiego:
    „Co do produktów to obawiam się, że .htaccess Ci tu nie pomoże. Jeżeli nazwy/numery ID produktów się zmieniły to jedyny sensowny sposób to zabawa z PHP. Czyli zapominasz całkowicie o .htaccess i przy uruchomieniu strony w PHP sprawdzasz czy istnieje dany produkt. Jeżeli nie istnieje to go szukasz i jak znajdziesz to robisz przekierowanie. Dla optymalizacji najlepiej zrobić osobną tabelę gdzie będą zapisane informacje o produktach, ich stary i nowy adres. ”

    Gdzie znajdę informacje na ten temat jak zrobić taką tabelę. Ten temat jest dla mnie całkowitą nowością.

    Będę wdzięczny za pomoc.

    Pzdr. Luzak

  15. MariuszT napisał:

    Przykro mi, chciałbym Ci pomóc ale obawiam się, że nie poradzisz sobie bez wiedzy programistycznej. U Ciebie trzeba zobaczyć jak ta strona jest zbudowana i na podstawie tej wiedzy przygotować rozwiązanie. Musi to zrobić programista. Co więcej, nie da się tego zrobić nie mając dostępu do Twojego serwera, kodu strony, bazy danych.

  16. Luzak napisał:

    ok, dzięki za pomoc.

    Pzdr.
    Luzak

  17. wolvverine napisał:

    dodanie R=301 do takiego przekierowania z kolei wywali serwer:
    RewriteRule ^mapa_strony$ index.php?id=site_map [NC,L]

  18. MariuszT napisał:

    Nie wiem czemu to generuje błąd. Tak na oko to nie powinno, najprostsze z możliwych przekierowań. Nie sprawdzałem u siebie.

  19. Helper napisał:

    Hej,

    Mam trochę inny problem, acz też związany z htaccess dlatego koment w tym poście. Chciałbym zrobić przekierowanie wszystkich podstron – konkretnie chodzi o to, że obecnie podstrony dublują się i występują w takich wersjach:

    1. http://www.przyklad.pl/plik.ph.....038;cat=20

    2. http://www.przyklad.pl/oto,ta,strona,11111,20.html

    Chciałbym, żeby z jednej automatycznie przekierowywało na drugą, ale żeby załatwić to dla wszystkich podstron (analogicznie zmienia się tylko id i cat) za jednym razem.

    Jest taka możliwość?

  20. MariuszT napisał:

    Zobacz piąte okienko z kodem na tej stronie http://www.tarnaski.eu/blog/przekierowanie-301/

    Użyj wyrażeń regularnych w .htaccess. Niestety jeżeli w nowych adresach używasz np. tytułu artykułu to .htaccess będzie bezradny, nie będzie potrafił pobrać tego tytułu bo w starym linku nie było go w adresie. Wtedy pozostaje Ci jedynie przekierowanie w PHP.

  21. q67 napisał:

    witam
    Problem brzmi:przedtem google pozycjonowało mnie po adresie domeny, zmieniłem serwer na darmowy i teraz google indexuje mnie po adresie darmowego serwera. Co z tym poradzić ,czy przekierowanie 301 coś może pomóc ?

  22. MariuszT napisał:

    Tak, zrób przekierowanie na starym serwerze na nowy adres.

  23. q67 napisał:

    tylko,że stary serwer jest juz nieaktywny.

  24. MariuszT napisał:

    Musisz mieć dostęp do starej domeny (folderu na który ta stara domena wskazuje) aby zrobić przekierowanie na nowy adres.

  25. q67 napisał:

    Chyba niezrozumiałeś… Domena jest ciągle ta sama tylko serwer gdzie trzymam pliki zmieniłem . i google teraz źle pozycjonuje moją strone(miejsce te same tylko pod adresem nowego serwera).

  26. MariuszT napisał:

    Napisałeś o nowym adresie więc myślałem, że go zmieniłeś na stałe, pozbyłeś się domeny. Jeżeli nie chcesz aby google Cię indeksowało po nowym adresie to zrób przekierowanie z tego błędnego adresu na ten dobry.

  27. q67 napisał:

    teraz jeszcze problem bo niemoge utworzyc na serwerze takiego pliku. A serwer też nie obsługuje php. Jakas inna możliwośc ?

  28. MariuszT napisał:

    Możliwe, że w Twoim panelu zarządzania serwerem możesz przekierować domenę na tą która Cię interesuje. Jeżeli nie i nie działa Ci PHP ani inny język server side i nie możesz utworzyć pliku .htaccess lub serwer nie potrafi go obsłużyć to (pomijając metody do których na pewno nie masz dostępu) nie przychodzi mi żadne rozwiązanie do głowy.

  29. MŁK napisał:

    Witam,
    przekierowanie na „bez www” bardzo mi się przydało,
    jednak mam pytanie.
    Mam trzy domeny: domena.pl, domena.eu i domena.cba.pl
    Wszystkie są skierowane na ten sam serwer.
    Czy istnieje możliwość takiej konfiguracji pliku .htaccess, aby wszystkie kierowały na domenę .pl lub .eu (mimo że ta sama strona jest na jednym serwerze)?

  30. MŁK napisał:

    Jeszcze raz: Nie zauważyłem innego artykułu na ten temat. Pomogły mi oba i to bardzo. Oby tak dalej :-)

  31. MariuszT napisał:

    Czyli mam rozumieć, że już sobie poradziłeś? :)

  32. MŁK napisał:

    Tak, nie zauważyłem tego na początku artykułu „sporo (tu i tu)” i na linka nie kliknąłem. Pozdrawiam.

  33. Kojot napisał:

    Panowie, przymierzam się do nowej domeny i przekierowania 301. Wie ktoś może, jak sprawdzić, czy nowa domena „usamodzielniła” się już, ma własny PR i można na stałe zrezygnować ze starej (zawierającej przekierowanie) bez obawy że wszystko się sypnie?

  34. MariuszT napisał:

    Pisałem o tym już raz ale napiszę ponownie.

    Póki istnieje przekierowanie to siła PR, linków itd. jest przekazywana. Usuniesz przekierowanie (np. nie opłacając starej domeny) i wszystko zostanie utracone. Nie wiem czemu ludzie sądzą, że przekierowanie 301 jest jednorazowe i po jakimś czasie można je usunąć bez konsekwencji…

    PS
    Aby przekonać się czy przekierowanie już w pełni działa można sprawdzić site starej domeny lub np. sprawdzić czy nowa domena trafiła w serpach na pozycje starej. Nie ma jednak metody, która jasno odpowie: tak, Google już całkowicie wziął pod uwagę Twoje przekierowanie.

  35. Kojot napisał:

    Dzięki MariuszT. Wyciągam z tego wniosek, że aby móc zrezygnować ze starej domeny i jednocześnie zachować przekazany PR i pozycje nowej, trzeba, po przekierowaniu, sukcesywnie pozycjonować nową i przekazywać bezpośrednio jej linki, które prowadziły wcześniej do starej. I dużo cierpliwości. I jeśli za rok usunę przekierowanie, 100% pewności nadal miał nie będę, że przekazany PR zostanie. Skądinąd może być też wyższy, jeśli np. w międzyczasie zdobyłem dobre linki do nowej.

  36. MariuszT napisał:

    Zgadza się. Przekierowanie 301, chociaż działa i jest jedynym sensownym sposobem na zachowanie PR, pozycji itd. po zmianie adresu, to niestety nie jest super idealne. Przekierowanie musi być aktywne najdłużej jak się da aby był pożądany efekt.

  37. Marys napisał:

    Mam pytanie,

    Czy można przekierować ścieżkę do katalogu na konkretną domenę? Chodzi o to, że posiadając kilka domen, które są przypięte do głównego katalogu na serwerze można się trochę wkopać w niezłe problemy, np.
    Mam domenę pierwsza.pl, która jest przypięta do katalogu:
    nazwaserwera.pl/pierwsza
    Jeśli mamy jeszcze inne domeny podpięte pod katalog główny:
    druga.pl
    trzecia.pl
    to możemy uzyskać w wyszukiwarce groteskowy efekt:
    druga.pl/pierwsza
    trzecia.pl/pierwsza

    Jak bronić się przed podobnym przypadkiem?

  38. MariuszT napisał:

    Zmienić strukturę katalogów :P A tak na poważnie to wiem, że są dostawcy hostingu, którzy mają takie ustawienia i to nastręcza problemów.

    Można sobie z tym poradzić na dwa sposoby.

    Sposób 1
    W katalogu głównym umieścić .htaccess z regułami: jeżeli domena jest X (w Twoim przykładzie domeny druga.pl i trzecia.pl) i katalog jest Y (u Ciebie „pierwsza”) to przekieruj na domenę Z (u Ciebie pierwsza.pl)

    Sposób 2
    W katalogu podrzędnym (w Twoim przykładzie katalog „pierwsza”) umieścić .htaccess z regułą: jeżeli domena nie jest X (Twoje pierwsza.pl) to przekieruj na X (ponownie pierwsza.pl).

    W sposobie pierwszym można pominąć sprawdzanie domeny ale wtedy musisz się pogodzić z niemożliwością posiadania adresu pierwsza.pl/pierwsza.

    Pokombinuj, pomyśl, jak się nie uda to postaram się pomóc w stworzeniu konkretnego kodu.

  39. Michał napisał:

    Radzę przekierować wszystkie żądania na index.php ja tak robię i dopiero php zajmuje się dalszą obróbką danych. Dlaczego? Łatwiej przenieść skrypt na inny serwer, miałem już przeprawę z OVH, ponieważ tam PHP jest zainstalowane jako moduł CGI i nie można używać php_flag/php_value tylko SetEnv.

    W htaccess najlepiej zrobić to tak:

    RewriteCond %{HTTP_HOST} !^(www\.)domena.pl [NC]
    RewriteRule ^(.*)$ http://www.prawdziwadomena.pl [R=301,L]

    A w PHP tak:

    if( $_SERVER[ 'HTTP_HOST' ] !== ‘twoj_host’ )
    {
    header( ‘Location: http://www.prawdziwadomena.pl/‘ . $_SERVER[ 'REQUEST_URI' ] );
    }

    Pozdrawiam :)

  40. MariuszT napisał:

    1. Twój komentarz jest zupełnie nie na temat. Co to ma wspólnego z przekierowaniami 301?
    2. 301 najlepiej robić w .htaccess a nie w PHP bo nie uruchamiamy wtedy parsera
    3. To oczywiste, że przekierowanie wszystkiego na index.php to dobra praktyka ale zapytam jeszcze raz – jaki to ma związek z tematem wpisu??
    4. Piszesz o przekierowaniu na index.php natomiast podajesz kod do .htaccess na przekierowanie 301 i kod PHP na zwykłe przekierowanie (nawet nie 301)…

    WTF?!

  41. Kamil napisał:

    Ad. 4) Mariusz, a czy czasem „zwykłe przekierowanie” to nie właśnie 301? Wydaje mi się, że to dokładnie 301 :-)

  42. MariuszT napisał:

    Mylisz przekierowanie 301 z 302.

  43. Kamil napisał:

    Faktycznie, domyślnie jest 302. A żeby dać 301 to trzeba napisać:
    header(„Location: /foo.php”, true, 301);

    Teraz już wiem, dzięki. Po prostu myślałem, że standardowo daje 302 – nie doczytałem manuala w tej kwestii.

  44. Michał napisał:

    Chciałem podać ideę a nie gotowy kod. wystarczy dodać true i response code 301

    Pozdrawiam

  45. lamer okrutny napisał:

    Hej,

    A co wrzucić w .htaccess, żeby http://www.domena.pl było przekierowywane na domena.pl i dodatkowo nieistniejące już stronki typu http://www.domena.pl/nieaktualnastronka.html lub domena.pl/nieaktualnastronka.html przekierowywało na domena.pl? Z góry wielkie dzięki za pomoc – kombinowałem ale przerasta mnie to, ja humanista jestem ;)

  46. MariuszT napisał:

    Zastosuj przekierowanie „z www” na „bez www” a następnie zobacz jak odpowiedziałem na ten komentarz http://www.tarnaski.eu/blog/pr.....mment-3557

  47. mis napisał:

    WItam,

    Mam pytanie do takiej sytuacji z przekierowaniem.

    Strona http://www.domena.pl jest zaindeksowana przez google linki sa przepisywane do przyjaznych w htaccess i wygladaja tak:

    http://www.domena.pl/9,9-jakasnazwa/

    teraz dodane zostaly jezyki do strony www i werjsa polska ma nowe linki:

    http://www.domena.pl/pl/9,9-jakasnazwa/

    W jaki sposob dodac przekierowanie 301 w htaccess aby stare zaindeksowane linki w google bez /pl/ przechodzily na poprawny link ? czyli na:

    http://www.domena.pl/pl/9,9-jakasnazwa/

    bede wdzieczny za podpowiedz

  48. MariuszT napisał:

    Pokaż proszę Twoje dotychczasowe przekierowania w .htaccess.

  49. mis napisał:

    Witam,

    mam standardowo:

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

    i nastepnie:

    na przykladzie zakladki z kontaktem:

    RewriteRule ^([a-z]+)/([kontakt\/]+)$ index.php?section=kontakt&do=showContact&lang=$1 [L]

    wczesniej gdy jeszcze nie bylo wprowadzonych jezykow ten wpis dla kontaktu wygladal tak:

    RewriteRule ^([kontakt\/]+)$ index.php?section=kontakt&do=showContact [L]

    na koncu htaccess mam jeszcze przekierowanie nieistniejacych stron do index ale bede to zmieniac na jakis komunikat 404 – chyba bedzie lepiej:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L,QSA]

    Podsumowujac:

    google ma zaindeksowane linki http://www.domena.pl/kontakt/
    i musze jakos je przekierowac na:

    http://www.domena.pl/pl/kontakt/

    oczywiscie jesli normalnie wejdziemy na www to link do kontaktu wyglada prawidlowo i jest z /pl/

    mam nadzieje ze cos wymyslimy :) czekam na porade i pozdrawiam

  50. MariuszT napisał:

    A próbowałeś tego?

    RewriteRule ^kontakt/?$ /pl/kontakt/ [R=301,L]

  51. mis napisał:

    Witam,

    Probowalem w srodowisku testowym i najwyrazniej bylo jednak cos nie tak, teraz gdy uruchomilem na serwerze produkcyjnym to zlapalo Twoja regule ktora zreszta sam probowalem juz.

    Ale problem pozostaje poniewaz serwis ma kilkaset stron i w htaccess mam regule od artykulow, newsow ktora zalatwia je wszystkie wlasnie z id itd no i tam juz nie bedzie chyba takie proste to przekierowanie. Dla pojedynczych podstron to nie problem jak widac.

    regula dla newsow wyglada tak:

    RewriteRule ^([a-z]+)/(info)/([0-9]+),(.*)/$ index.php?section=aktualnosci&type=index&id=$3&lang=$1

    poprzednio bez /pl/ wygladala tak:

    RewriteRule ^(info)/([0-9]+),(.*)$ index.php?section=aktualnosci&type=index&id=$2

    linki w indeksie google sa stare czyli:
    http://www.domena.pl/info/10,tytul_newsa/

    a po wprowadzeniu jezyka sa:
    http://www.domena.pl/pl/info/10,tytul_newsa/

    takze nie wiem tylko jak zastosowac teraz Twoje przekierowanie.

    czekam na ewentualna sugestie i dzieki za zainteresowanie – pozdrawiam

  52. MariuszT napisał:

    Przecież prosiłem o przekierowania, wszystkie :P

    Coś takiego?
    RewriteRule ^(info)/([0-9]+),(.*)$ pl/$1/$2,$3/ [R=301,L]

  53. mis napisał:

    Witam ponownie,

    Dziala Twoj przyklad, nie podawalem wszystkich regul poniewaz nie chcialem Cie obciazac zbytnio – chodzilo mi o przyklad zebym zlapal i wykonal wszystko sam, teraz dzieki Twoim przykladom sproboje wszystko wykonac i dam znac jak mi poszlo – poki co oba przyklady dzialaja.

    Za godzinke dam znac, jesli cos mi nie pojdzie wkleje przyklad :) do uslyszenia

  54. mis napisał:

    Witam ponownie,

    Juz prawie wszystko udalo sie zamienic, pozostala mi jedna regula z ktora sie mecze:

    nowa:
    RewriteRule ^([a-z]+)/([0-9]+),([0-9]+)-(.*)$ index.php?section=articles&do=showArticle&level=glowny&id=$3&parent=$2&lang=$1 [L]

    ktora przepisuje link do postaci:
    http://www.domena.pl/pl/1,2-tytul_artykulu/

    a linki zaindeksowane sa:
    http://www.domena.pl/artykul/1,2,tytul_artykulu/

    czyli zmieniac sie musi artykul na pl i , na -

    stara regula:
    RewriteRule ^([artykul]+)/([0-9]+),([0-9]+),(.*)$ index.php?section=articles&do=showArticle&level=glowny&id=$3&parent=$2 [L]

    caly czas kombinuje zeby nie bylo ze sie obijam

    probowalem tak ale nie lapie:

    RewriteRule ^(artykul)/([0-9]+),([0-9]+),(.*)$ /pl/$1/$2,$3-$4/ [R=301,L]

    pozdrawiam

  55. MariuszT napisał:

    RewriteRule ^artykul/([0-9]+),([0-9]+),(.*)$ pl/$1,$2-$3/ [R=301,L]

  56. mis napisał:

    Witam ponownie,

    Dziala Twoja regula super ! analogicznie zmienilem takze podobna regule:

    stara:
    RewriteRule ^([artykul]+)/([0-9]+),(.*)$ index.php?section=articles&do=showArticle&level=artykuly&id=$2 [L]
    nowa:
    RewriteRule ^([a-z]+)([0-9]+)-(.*)$ index.php?section=articles&do=showArticle&level=artykuly&id=$2&lang=$1 [L]

    i dodalem:
    RewriteRule ^artykul/([0-9]+),(.*)$ pl/$1-$2 [R=301,L]

    powinno byc chyba OK

    Bardzo mi pomogles – dziekuje

    Mam jeszcze pytanie odnosnie przekierowan do SSL ja wymuszam aby link byl po https gdy ktos wchodzi np. na login:

    http://www.domena.pl/login to rewritem wymuszam https://www.domena.pl/login

    RewriteRule ^([a-z]+)/(login)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
    RewriteCond %{SERVER_PORT} !^443$

    czy tutaj powinno byc [L,R=301] tez czy moze zostac [L,R], jak to kochane G potraktuje ? jako duble link:

    http://www.domena.pl/login
    https://www.domena.pl/login

  57. MariuszT napisał:

    Używaj 301 przy przekierowaniach. Niech Google wie, że jest jeden i tylko jeden adres przez Ciebie pożądany.

  58. mis napisał:

    Hej,

    Dzieki – bede sie stosowac.

    Przy okazji dla innych ktorzy chcieliby aby linki konczyly sie slashem – / oto wpis ktory zastosowalem:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\..+$
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule (.*) http://www.domena.pl/$1/ [R=301,L]

    dzieki niemu mamy: http://www.domena.pl/kontakt/ zamiast http://www.domena.pl/kontakt

  59. Po kiego choo mi pseudonim napisał:

    Stary jesteś geniuszem – prosto i skutecznie dzięki :]

  60. esder napisał:

    Witam,
    Jak za pomocą jednej linijki przekierować różne adresy do formy z dodanym „katalogiem”?, przykładowo:
    http://www.adres.pl/strona-1
    http://www.adres.pl/strona-2
    http://www.adres.pl/strona-3
    http://www.adres.pl/strona-4

    przekierowane na:

    http://www.adres.pl/katalog/strona-1
    http://www.adres.pl/katalog/strona-2
    http://www.adres.pl/katalog/strona-3
    http://www.adres.pl/katalog/strona-4

    nigdy chyba tych znaczków nie pojmę w .htaccess :/

  61. esder napisał:

    aha, i żeby przekierowywało tylko podstrony zawierające określone słowo, w tym przypadku „strona”, nie wiem czy w ogóle to możliwe, ale spytam ;)

  62. MariuszT napisał:

    RewriteRule ^(.*)$ katalog/$1 [R=301,L]

    EDIT
    To było tak od razu :P Ten wyraz „strona” jest zawsze na początku? Jeżeli tak to:

    RewriteRule ^strona(.*)$ katalog/strona$1 [R=301,L]

  63. esder napisał:

    Dzięki wielkie :)

  64. Combacik napisał:

    witam wszystkich, ja mam problem z odwróceniem sytuacji. Jest ktoś, kto ma domenę X i przekierowuje ja na moja domenę Y. Problem w tym, że wprowadza to czytelników w błąd budując w nich przekonanie o jakimkolwiek powiązaniu biznesowym, tematycznym czy własnościowym. Jakaś sugestia co do obrony?

  65. MariuszT napisał:

    @Combacik

    RewriteCond %{HTTP_HOST} ^(www\.)?domena_X.pl(.*) [NC]
    RewriteRule ^(.*)$ http://www.redtube.com/ [R=301,L]

    :) :) :)

  66. GlassEye napisał:

    Bradzo fajna strona, ja chyba też odzyskuję wiarę w internet, tak jak wiele lat temy było można znaleść wiecej informacji do nauki tak w którymś momencie wszystko staneło.
    Ale OK.

    mam pytanie do experta od 301

    Jeśli mam stronę która wysypuje błedy i chcę zrobic przekierowanie na inną z taka samą zawrtością, czy to nie bedzie przez google odebrane jako duplikat?

    I tez ważne pytanie, jeśli zrobię przekierowanie ze strony [A] na stronę [B]
    i jeśli np strona [A] ma PR2 to po przekierowniu adres strony [A] bedzię w wynikach na tej samej pozycji? czy juz nie będzie indexowana tylko na miejscu [A] pojawi się [B] ?

  67. MariuszT napisał:

    Pytanie pierwsze: jeżeli robisz przekierowanie to nie będzie duplikatu bo nie będą dwie strony tylko jedna, ta nowa. Zrób 301 i google zrozumie, że zmieniasz stronę, stara jest do wywalenia i zastępujesz ją nową.

    Pytanie drugie: po przekierowaniu strona [A] zostanie podmieniona na stronę [B]. [A] zniknie z indeksu i na jej miejsce pojawi się [B]. Strona [B] uzyska pozycję strony [A], jej PR itd. Tak jest przynajmniej w teorii :D W praktyce wychodzi różnie, proces jest rozłożony w czasie itd. Ale to jedyny sensowny i oficjalnie zalecany sposób.

  68. GlassEye napisał:

    OK wielkie dzieki. Rozumiem że wszystkie linki prowadzące do strony [A] przejmie strona [B] itd

  69. MariuszT napisał:

    Tak, zgadza się. Dopóki będzie przekierowanie pod domeną [A] do domeny [B] dopóty linki prowadzące do domeny [A] będą dla google tak naprawdę linkami do domeny [B].

  70. GlassEye napisał:

    Fajnie :)

    a co z takimi przekierowaniami?

    np
    <meta HTTP-EQUIV=”Refresh” CONTENT=”0; URL=http://www.STRONA[B].com”>
    i np
    <script language=”JavaScript”>
    <!–
    window. location =”http://www.STRONA[B].com”;
    //–>
    </script >
    to jest też permanetne przkierowanie?
    majac cos takiego, też strony [B] przejmują wszystko ze strony ktora przekierowuje?
    i przekierowujaca wypada z indexu?

    Jesli dobrze pamiatam to chyba google cos nie chętne były takim zabiegom, a szczególnie jeśli czas po którym następowało przekierowanie był za krótki.

  71. MariuszT napisał:

    To jest przekierowanie tymczasowe, 302. Google nie przenosi przy tym przekierowaniu siły linków, PR, nie zamienia adresów w swoich indeksach itd.

  72. GlassEye napisał:

    aaa no to jasne.

    ale nurtyje mnie jeszcze jedno
    przy 301 Strona [A] jesli zostanie usunieta z indexu i zostanie zastąpiona [B] to google będzie brało pod uwage linki wychodzące ze strony [A]? googleBot przejdzie na adresy z tej strony [A] ? Ciekawe, nie wiem jak z mocą tych linków ze strony [A] czy jeszcze ta strona bedzie miała jakąś wartość/

  73. MariuszT napisał:

    Strona [A] dla google przestaje istnieć. Jak miałoby to działać, przecież strony [A] już nie ma a więc i linków na stronie [A] nie ma.

  74. nilo napisał:

    hej sluchaj bardzo to czytelne to dla mnie super sprobuje ze swoim blogiem . ale mozesz powiedziec mi jeszcze czy jesli ja tylko aktualizuje strone ale nie robilam jej to jak moge znalezc ten htaccess ??

  75. MariuszT napisał:

    Pliku .htaccess może nie być. Nie jest wymagany jeżeli nie stosuje się żadnych przekierowań itd.

  76. Paweł Benetkiewicz napisał:

    @Panie „spec od 301″: usunięcie www z adresu niniejszej strony (http://www.tarnaski.eu/blog/un.....owanie-301) przekierowuje na http://www.tarnaski.eu/uniwers.....owanie-301, czyli nie ma /blog, co ostatecznie zmienia Pana tytuł ze speca na szpeca tak, jak Pana 301 zmienia blog na 404.

  77. MariuszT napisał:

    @Panie „czepiam się bo nie mam nic ciekawego do powiedzenia”, moje 301 jest w trakcie zmian bo będę zmieniał domenę na tarnaski.pl tylko mam teraz inne rzeczy na głowie i stanąłem w połowie. EOT.

Odpowiedz



Podobne wpisy: