Jak wykonać proste przekierowania w htaccess

Obrazek dla Jak wykonać proste przekierowania w htaccess

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. Przekierowania htaccess tworzone są za nas. 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.

UWAGA! Warto jednak zachować sobie kopię obecnego w razie gdyby nasze zmiany spowodowały problemy w wyświetlaniu strony lub wystąpi pętla przekierowań.
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 domeny 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 na adres strony używając https:// musimy wykonać to przekierowanie. Nawet jeśli odwiedzający wpiszą po prostu nazwę domeny w panelu adresu przeglądarki. W tej sytuacji chcemy zastosować przekierowanie http na https tzw. wymuszenie HTTPS. W tym celu wystarcz wkleić do pliku .htaccess poniższą regułkę, które odpowiada za przekierowanie domeny:

<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. Certyfikat SSL musi być aktywny w domenie. Musimy wybrać, którą wersją się posługujemy i wdrożyć odpowiednią konfigurację. 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ść).

Pamiętaj o tym wykonując przekierowanie http na https! Tak, google rozpoznaje przedrostek www jako oddzielną domenę ( www. to po prostu inna domena, tak samo jak blog.domena.pl). Dlatego ważne jest abyśmy wykonali przekierowanie http na https, o ile nie zostanie wdrożone z automatu przez hosting lub nasz CMS strony www.

Uważaj też na problemy typu mixed-content pojawiające się jeśli przekierujemy http na https ale url domeny do zasobów na naszej stronie pozostaną dalej jako http://. Jeżeli tak jest przeczytaj SSL Mixed-content w WordPress – HitMe Blog Hosting gdzie opisujemy jak rozwiązać ten problem.

2) Przekierowanie do -> BEZ www

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

Obecnym trendem jest optymalizacja, dlatego pozbywa się staromodnego wpisywania ciągle przedrostka www. przed nazwą domeny. Umówmy się, nigdy nie miało to większego sensu – tym bardziej od czasu kiedy domeny zaczęły służyć w większości do serwowania stron www. Wykorzystamy do tego również przekierowanie 301. W tym celu przydatna będzie taka regułka:

<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? Wykorzystamy to przekierowanie 301 z domeny głównej na przedrostek www.

<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: Przekierowania htaccess regułki 2) oraz 3) nie mogą być stosowane jednocześnie – mogą być używane jedynie zamiennie. Jeśli użyjemy ich razem nastąpi tzw. pętla przekierowań.

4) Przekierowania htaccess katalogu głównego do folderu

Przekierowanie 301 htaccess z domeny głównej na folder.

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

RedirectMatch 301 ^/$ /sklep/

5) Niewidzialne przekierowanie katalogu głównego do folderu

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

Przepisujemy odwołania na nasz adres strony do katalogu.

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. Oczywiście aby to miało sens certyfikat SSL musi być aktywowany na naszej stronie www.

<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! Uważaj na przekierowania htaccess. Zawsze zachowaj kopię swojego pliku .htaccess lub pamiętaj o zmianach, które wykonałeś – tak aby móc je ręcznie cofnąć. Testuj też swoje przekierowanie domeny w trybie incognito przeglądarki.

Podoba Ci się? 3
Miniaturka Adam
Adam

Idealistyczny DevOps/Backend developer po służbie w formacji I-szej linii wsparcia, od 9 lat sercem związany z HitMe, przez którego teraz na blogu pojawia się tyle artykułów poświęconych platformie WordPress ;-).