Plik .htaccess jest domyślnym plikiem zamieszczonym w głównym katalogu danej domeny, z pomocą którego można zmieniać ustawienia serwera Apache. Poniżej zostało podany kilka przykładów przekierowań URLz wykorzystaniem wspomnianego pliku.
Przekierowanie 301
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?domena_źródłowa.pl [NC]
RewriteRule (.*) http://domena_docelowa.pl/$1 [R=301,L]
Przekierowanie 301 jest jedną z najbardziej skutecznych oraz przyjaznych dla wyszukiwarek metod przekierowania. Jeżeli przeniosłeś artykuł do nowego działu, lub przeniosłeś stronę na inną domenę przekierowanie 301 informuje przeglądarki, że strona została bezpowrotnie przeniesiona na inny adres URL.
Wymuszenie HTTPS w adresie URL domeny
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}
Powyższym wpisem w pliku .htaccess zostanie wymuszone automatyczne przekierowanie na HTTPS. Przykładowo wpisując w przeglądarce adres URL http://kei.pl zostanie on automatycznie zmieniony na https://kei.pl
Wymuszenie przedrostka „www.” w adresie URL domeny
RewriteEngine On
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Stosując podane reguły wymusimy w adresie URL domeny przedrostek „www.” . Przykładowo wpisując w przeglądarce adres URL „kei.pl” zostanie on automatycznie zmieniony na „www.kei.pl”.
Wymuszenie adresu URL domeny bez przedrostka „www.”
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
W przypadku zastosowania powyższego wpisu każdy użytkownik, który wpisze w adresie przeglądarki przykładową domenę „www.kei.pl” zostanie automatycznie przekierowany na adres „kei.pl”.
Przekierowanie podstrony na inny adres URL/inną podstronę
Redirect 301 /oldpage.php http://www.example.com/newpage.html
Redirect 301 /oldpage2.php http://www.example.com
Podany przykład pozwoli na przekierowanie konkretnej subdomeny na inną domenę. Przykładowo wpisując w przeglądarce adres URL „https://kei.pl/oldpage.php” zostaniemy przekierowani na „http://www.example.com/newpage.html”.
Usuwanie końcowego ukośnika (slasha) z adresu URL domeny
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
Ten fragment kodu będzie przekierować ścieżki kończące się ukośniki na ich odpowiedniki non-slash
(z wyjątkiem rzeczywistych katalogów), na przykład „http://www.example.com/blog/” zostanie przekierowany na adres „http://www.example.com/blog”. Jest to ważne dla SEO, ponieważ zaleca się mieć kanoniczny URL dla każdej strony.
Źródło: https://www.kei.pl/pomoc/przekierowanie-301-htaccess
Przekierowanie strony na adres z www lub bez www
Przekierowania 301 (stałe) lub 302 (tymczasowe) przydają się przede wszystkim przy pozycjonowaniu strony, aby „pokazać” wyszukiwarce, że tylko jeden zapis adresu strony jest poprawny. Wybór tego czy adres domeny będzie poprzedzony „www” czy też nie zależy tylko od użytkownika i nie ma wpływu na pozycje domeny w wyszukiwarce. Zatem w zależności od wybranego rozwiązania i preferencji można wykonać przekierowanie:
1. „Z www” na „bez www”:
a) przez plik .htaccess (powinien znajdować się w folderze public_html – jeśli go nie ma, należy utworzyć):
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
lub z dodatkowym przekierowaniem na SSL:
RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
b) przez skrypt PHP (kod powinien być dodany na początku pliku np. index.php zaraz za znacznikiem „<?php”):
if (substr($_SERVER[’HTTP_HOST’], 0, 4) == 'www.’)
{
header(’HTTP/1.1 301 Moved Permanently’);
header(’Location: http://.’ . $_SERVER[’HTTP_HOST’] . $_SERVER[’REQUEST_URI’]);
exit();
}
Jeśli przekierowanie dotyczyć ma adresów z szyfrowaniem SSL, należy zamienić „http” na „https”.
2. Z „bez www” na „z www”.
a) przez plik .htaccess:
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]
lub z dodatkowym przekierowaniem na SSL:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
b) przez skrypt PHP:
if (substr($_SERVER[’HTTP_HOST’], 0, 4) != 'www.’) {
header(’HTTP/1.1 301 Moved Permanently’);
header(’Location: http://www.’ . $_SERVER[’HTTP_HOST’] . $_SERVER[’REQUEST_URI’]);
exit();
}
Jeśli przekierowanie dotyczyć ma adresów z szyfrowaniem SSL, należy zamienić „http” na „https”.