Jak wykonać proste przekierowania w htaccess

W htaccess możesz więcej - opisujemy kilka przydatnych funkcji


img

Dowiesz się: Jak przekierować domenę na "bez www" lub "z www" oraz przekierować do HTTPS, jak wprowadzić pomniejsze zabezpieczenia oraz jak zmienić wersje PHP dla Hostingu WWW

Dla systemu operacyjnego: Linux Windows Każdy

Za pomocą pliku .htaccess mamy pewną kontrolę nad zachowaniem skryptów/domeny – niejednokrotnie zajmuje się tym nasz framework/CMS/sklep i nawet o tego nie widzimy, jednak jeśli nasza strona jest stroną statyczną lub z poziomu CMS nie mamy wystarczających opcji to takie zmiany możemy wprowadzić ręcznie właśnie poprzez edycję/utworzenie takiego pliku.

W katalogu ze stroną należy utworzyć plik o nazwie .htaccess lub edytować obecny.

Warto jednak zachować sobie kopię obecnego w razie gdyby nasze zmiany spowodowały problemy w wyświetlaniu strony.
Zmiany wprowadzane w plikach .htaccess mają skutek natychmiastowy. W niektórych przypadkach konieczne może być odczekanie 10 minut na przebudowanie pamięci cache.

Używać tu będziemy przekierowań 301 czyli tzw. „przekierowań stałych”

 

1) Przekierowanie z HTTP na HTTPS

przykład: http://domena.pl -> https://domena.pl

Jeśli posiadamy zainstalowany certyfikat SSL i chcemy aby wszyscy odwiedzający wchodzili używając https:// nawet jeśli wpiszą po prostu nazwę domeny, w tej sytuacji chcemy zastosować tzw. wymuszenie HTTPS i wystarczy wkleić do pliku .htaccess poniższą regułkę:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !=on
   RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

Przekierowania do www oraz bez www muszą być skonfigurowane, tzn. musimy wybrać, którą wersją się posługujemy i wdrożyć odpowiednią konfigurację ponieważ ma to duży wpływ na pozycjonowanie strony  – bez tego serwujemy tzw. duplikowaną treść (duplicated content) ponieważ zarówno pod www.domena.pl jak i domena.pl silnik wyszukiwarki widzi ten sam content (treść) pod dwoma domenami (tak www. to po prostu inna domena, tak samo jak blog.domena.pl)

 

2) Przekierowanie do -> BEZ www

przykład: www.domena.pl -> domena.pl

Obecnym trendem jest optymalizacja, dlatego pozbywa się staromodnego wpisywania odwiecznie www. przed nazwą domeny, gdyż nigdy nie miało to większego sensu, odkąd domeny zaczęły służyć w większości do serwowania stron www.

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
  RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
</IfModule>

3) Przekierowanie domeny do -> www.

przykład: domena.pl -> www.domena.pl

Jeśli jednak chcemy pozostać w zgodzie z tradycją lub www.domena.pl po prostu lepiej wygląda wizerunkowo, używamy

<IfModule mod_rewrite.c>
  RewriteEngine On 
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} !^www..+$ [NC]
  RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

UWAGA: Regułki 2) oraz 3) nie mogą być stosowane jednocześnie – mogą być używane jedynie zamiennie.

 

4) Przekierowanie katalogu głównego do folderu

przykład: domena.pl -> domena.pl/sklep/

RedirectMatch 301 ^/$ /sklep/

5) Niewidzialne przekierowanie katalogu głównego do folderu

przykład: domena.pl -> domena.pl/sklep/

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/sklep
RewriteRule ^(.*)$ /sklep/$1 [NC,L]

Pomniejsze zabezpieczenia

Zabezpieczenia poniższe możemy wdrożyć tylko wedle potrzeb dla konfiguracji.

6) Zablokowanie dostępu z poziomu przeglądarki do pewnych typów plików (np. plików konfiguracyjnych strony)

Pliki z rozszerzeniami .bak, .conf, .dist itd. nie będą dostępne (błąd 403 – brak dostępu).

<FilesMatch "(^#.*#|.(bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
</FilesMatch>

7) Zmniejszenie ryzyka MIME-type sniffing

Uniemożliwia przeglądarce ‚węszenia’ po typach MIME, szczególnie przydatne w przypadku stron, gdzie użytkownicy dokonują własnych uploadów plików.

<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
</IfModule>

8) Usunięcie X-Powered-By w nagłówku

Jeśli nasz skrypt umieszcza w nagłówku X-Powered-By, a nie mamy możliwości wyłączenia nagłówka z poziomu frameworka, możemy użyć poniższej regułki

( https://php.net/manual/en/ini.core.php#ini.expose-php )

 

<IfModule mod_headers.c>
    Header unset X-Powered-By
</IfModule>

9) Wymuszenie komunikacji SSL po stronie klienta

Jeśli w przeglądarce użytkownik wpisze „domena.pl”, nawet jeśli serwer przekierowuje do HTTPS czyli bezpiecznej wersji witryny to wciąż istnieje możliwość przekierowania dla atakującego (początkowe połączenie odbyło się przez HTTP) dla osoby atakującej

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=16070400"
</IfModule>

10) ZMIANA PHP (tylko Hosting WWW)

Warto przypomnieć iż dla klientów naszego Hostingu WWW (nie klientów usługi VPS) zmiana wersji PHP odbywa się również z poziomu .htaccess

Zmiana wersji PHP na hostingu współdzielonym możliwa jest odrębnie dla każdej ze stron, a nawet dla każdego z folderów. Jeśli dla danego folderu nie zdefiniowano wersji PHP to ustawienia dziedziczone są z folderu nadrzędnego.

Wersja PHP 7.0

AddHandler application/x-httpd-php70 .php

Wersja PHP 5.6

AddHandler application/x-httpd-php56 .php

Wersja PHP 5.5

AddHandler application/x-httpd-php55 .php

Wersja PHP 5.4

AddHandler application/x-httpd-php54 .php

Wersja PHP 5.3

AddHandler application/x-httpd-php53 .php

Wersja PHP 5.2

AddHandler application/x-httpd-php52 .php

 

Pamiętaj! Zawsze trzymaj kopię swojego pliku .htaccess lub pamiętaj o zmianach, które wykonałeś – tak aby móc je ręcznie cofnąć.


Czytaj kolejne poradniki