Pozycjonowanie i OptymalizacjaPozycjonowanie i Optymalizacja
 Szukaj   Pomoc    Regulamin    Użytkownicy   Kalendarz

Hosting w Prohost.pl

Witaj Gościu ( Zaloguj | Rejestruj )

> FAQ: .htaccess, 301 i inne SEO porady
Ocena 4 V
relons
post 12.12.08 - 20:07
Post #1





Grupa: Members
Postów: 1,510
Podziekowań: 53
Dołączył: 18.10.2008
Nr użytkownika: 14,724



Postanowiłem napisać mini FAQ o .htaccess specjalnie pod kątem SEO. Same najważniejsze informacje, maksimum treści żebyście potrafili przerabiać/sklejać istniejące już .htaccess na swoje potrzeby. Jeżeli coś pominąłem i będziecie mieli pytania to piszcie - rozbuduje ten temat o kolejne przykłady.



Na jakiej zasadzie działają reguły RewriteCond i RewriteRule? (krótki wstęp, reszta będzie w przykładach)

RewriteRule to reguły przepisywania URLi, wykonywane są jedna po drugiej, chyba, że na końcu, w nawiasie kwadratowym wpisane jest L co oznacza, że dana reguła jest ostatnia i kolejne RewriteRule nie mają zostać wykonywane.

RewriteCond jest opcjonalnym wyrażeniem warunkowym, który musi być spełniony aby reguły w RewriteRule zostały wykonane. Wstawia się je przez RewriteRule, wyrażenia sprawdzane są jedno po drugim ze spójnikiem logicznym AND (czyli wszystkie warunku muszą zostać spełnione), chyba, że na końcu w nawiasie kwadratowym wstawimy warunek OR. Reguły RewriteCond dotyczą tylko i wyłącznie pierwszej reguły RewriteRule wpisanej za nimi.



Jak przekierować domenę, przy wejściach bez WWW na format www.domen.tld?

KOD
# reguła testująca - jeżeli domena nie ([i]![/i]) zaczyna się ([i]^[/i]) od www ([NC] oznacza niewrażliwość na małe/duże litery)
RewriteCond %{HTTP_HOST} !^www. [NC]
# reguła przepisująca, wykonywana tylko kiedy warunek reguły testującej (RewriteCond) jest spełniony (w [] L oznacza ostatnią regułę, R=301 oznacza przekierowanie 301)
RewriteRule ^(.*)$ http://www.domena.tld/$1 [L,R=301]




Jak przekierować wejście z www.domena.tld/index.php bez parametrów na www.domena.tld?

KOD
# reguła testująca - jeżeli wywołaniem jest dokładnie ciąg znaków "/index.php" i żaden znak więcej ($ oznacza koniec ciągu, ^ początek)
RewriteCond %{REQUEST_URI} ^\/index.php$
# reguła testująca - sprawdza czy nie ma zapytania ?param1=1&param2=2
RewriteCond %{QUERY_STRING} ^$
# reguła przepisująca
RewriteRule ^(.*)$ http://domena.tld/ [L,R=301]




Jak połączyć powyższe dwa listingi, aby po wpisaniu w do przeglądarki http://domena.tld/index.php przekierowało użytkownika na http://www.domena.tld/ ?

KOD
RewriteEngine on
# warunek zostanie spełniony tylko przy pierwszym wywołaniu, kiedy nastąpi wejście bez www. (z http://domena.tld/index.php)
RewriteCond %{HTTP_HOST} !^www. [NC]
# w tym miejscu nastąpi przekierowanie na przeglądarki na http://www.domena.tld/index.php
RewriteRule ^(.*)$ http://www.domena.tld/$1 [L,R=301]

RewriteCond %{REQUEST_URI} ^\/index.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://domena.tld/ [L,R=301]




Jak przekierować masowo domeny, przy wejściach bez WWW na format www.domen.tld?

KOD
RewriteCond %{HTTP_HOST} !^www. [NC]
# dodatkowo sprawdzam czy host nie jest adresem IP (czyli czy nie kończy się cyfrą)
RewriteCond %{HTTP_HOST} ![0-9]$ [NC]
# w RewriteRule można wpisać %{HTTP_HOST} zamiast konkretnej domeny
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]




Zmieniłem linkowanie na stronie. Jak przekierować konkretne stare URLe na nowe?

Rozpatrzmy przypadek, kiedy użytkownik chce przejść z URLi:
http://www.domena.tld/index.php?strona=1
http://www.domena.tld/index.php?strona=4
http://www.domena.tld/index.php?strona=23
na URLe:
http://www.domena.tld/1/Jakis+Opis.html
http://www.domena.tld/4/Nazwa+Dzialu.html
http://www.domena.tld/23/Jakis+inny+opis+lub+nazwa.html

KOD
# zwróć uwagę na to, że adres przekierowania jest bez pełnego URLa oraz bez przekierowania 301 (jest to przekierowanie wewnętrzne serwera, niewidocznie dla przeglądarki internetowej)
RewriteRule ^([0-9])\/([^.]+)\.html$ /index.php?strona=$1
# pod $2 jest opis, można użyć też takiej konstrukcji
# RewriteRule ^([0-9])\/([^.]+)\.html$ /index.php?strona=$1&opis=$2

Jeżeli chcesz połączyć ten warunek razem z poprzednimi wystarczy go dodać na samym końcu pliku .htaccess.



Moje przepisywanie URLi nie działa przy RewriteRule bez podawania pełnego URLa z domeną

Zaraz za RewriteEngine on dopisz:
KOD
# jeżeli twój .htaccess jest w katalogu głównym domeny:
RewriteBase /
# jeżeli twój .htaccess jest w podkatalogu costam (http://www.domena.tld/costam)
# RewriteBase /costam/
# nie zapominaj o końcowym slashu

Powyższy problem ten występuje m.in. na home.pl

Pełna dokumentacja: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

[dodane]
CYTAT(Irek @ 12.12.08 - 20:41) *

Od siebie dodam jeszcze:
Mini tutorial używania mod_rewrite z życiowymi przykładami

Ten post edytował relons 12.12.08 - 21:14


--------------------
Sprawdź liderów systemów wymiany linków:
linkme.pl (stały), gotlink.pl (rotacyjny)


Go to the top of the page
 
+Quote Post



Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 


Fundacja Mimo Wszystko
Zebraliśmy już
7,279.52 pln

Domeny, Hosting w Az.pl

Domeny, Hosting w Active24.pl



Książka o pozycjonowaniu

Dotacje na e-biznes. Pozyskiwanie środków z UE w ramach PO IG 8.1

Wersja Lo-Fi Aktualny czas: 30.07.10 - 16:59