Baza wiedzy

mod_rewrite

Co możemy osiągnąć?

  • adresy podstron przyjazne dla odwiedzających i wyszukiwarek
  • wymuszenie adresu strony z www lub bez www
  • zmianę adresu strony - bez utraty ruchu oraz pozycji w wyszukiwarkach

Jak zacząć?

Rozszerzenie mod_rewrite jest dostępne dla każdego konta w hostingu LaoHost, jednak domyślnie jest ono wyłączone ze względów wydajnościowych. Aby je włączyć, należy dopisać do pliku .htaccess (umieszczonym w katalogu public_html) poniższą linijkę:

RewriteEngine On

Przyjazne odnośniki

Najlepszym oraz najczęściej stosowanym przez twórców CMS i frameworków sposobem na przyjazne odnośniki, jest przekierowanie całego ruchu do jednego skryptu PHP (na przykład index.php), który na podstawie wywołanego adresu decyduje, jaki kod należy wykonać. Przykładowy kod:

# Jeśli skrypt jest umieszczony w podkatalogu, należy dopisać jego nazwę w RewriteBase
RewriteBase /

# Pomijamy przepisywanie adresów dla istniejących plików i katalogów
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Przekazujemy adres podstrony do zmiennej $_GET['uri']
RewriteRule .* index.php?uri=$0 [PT,L,QSA]

Adres strony z www lub bez www

Wystarczy dopisać dwie linijki do pliku .htaccess. Dla adresu z www:

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

Dla adresu bez www:

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

Zmiana adresu strony

Przekierowanie 301 umożliwia skierowanie użytkowników na nowy adres witryny oraz przekazanie wyszukiwarkom informacji, że strona zmieniła swój adres na stałe. Przekierowanie to można wykonać w PHP, jednak jeśli nasz skrypt jest zbudowany z wielu plików, o wiele wygodniejsze będzie wykorzystanie pliku .htaccess. Jeśli nie zmieniamy adresów podstron, wystarczy dopisać:

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

Wymuszenie SSL

Aby wymusić przekierowanie witryny na HTTPS/SSL należy umieścić w pliku .htaccess poniższe wpisy:

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Oceń przydatność:


Zobacz także: