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]