.htaccess w praktyce - przekierowania, blokady, pułapki

Gotowe reguły .htaccess, które naprawdę się przydają: HTTPS i jedna wersja adresu, ochrona wp-config, blokada PHP w uploads - plus ratunek po błędzie 500.

Autor: McProdukt · Opublikowano: · Aktualizacja:

.htaccess to plik konfiguracyjny serwera WWW w katalogu strony (zwykle public_html), w którym ustawisz przekierowania, wymuszenie HTTPS i blokady dostępu. Własne reguły dopisuj powyżej bloku # BEGIN WordPress, a przed każdą zmianą zrób kopię pliku - jedna literówka potrafi położyć stronę błędem 500. W tym przewodniku zbieramy reguły, które realnie przydają się właścicielowi strony firmowej, wraz z wyjaśnieniem, co robią i jak je bezpiecznie testować.

Przykłady są w składni serwera Apache. LiteSpeed Enterprise czyta ją tak samo, ale OpenLiteSpeed - na którym działa nasz hosting - wykonuje z .htaccess przede wszystkim reguły przepisywania adresów i przekierowania. Przy regułach, które na OpenLiteSpeed wyglądają inaczej, podajemy wersję działającą na naszym hostingu.

Czym jest .htaccess i gdzie leży?

.htaccess to plik konfiguracyjny serwera WWW działający na poziomie katalogu. Apache czyta go przy każdym żądaniu do danego katalogu i jego podkatalogów, więc zmiany działają od razu, bez restartu serwera. Główny plik strony leży w katalogu public_html.

Dwie rzeczy praktyczne na start. Po pierwsze, pliki zaczynające się od kropki są domyślnie ukryte - w kliencie FTP włącz pokazywanie plików ukrytych (w FileZilli: Serwer - Wymuś pokazywanie plików ukrytych), inaczej będziesz przekonany, że pliku nie ma. Po drugie, przed każdą zmianą pobierz kopię obecnego pliku. Cofnięcie błędu to wtedy jedno wgranie, a bez kopii - zgadywanie, jak wyglądał oryginał. Podstawy pracy z plikami przez FTP opisuje poradnik o FileZilli.

Gdzie dopisywać własne reguły w WordPressie?

Świeży WordPress tworzy w .htaccess sekcję zaczynającą się od # BEGIN WordPress i kończącą # END WordPress. To reguły odpowiedzialne za ładne adresy podstron. Zasada jest prosta: własne reguły dopisuj POZA tym blokiem - najlepiej powyżej. WordPress przy zapisie ustawień bezpośrednich linków przebudowuje zawartość swojego bloku i wszystko, co w nim dopiszesz, może zostać nadpisane bez ostrzeżenia.

Jak zrobić przekierowania w .htaccess?

Teorię kodów 301/302 i decyzję „kiedy który" omawia osobny przewodnik po przekierowaniach - tutaj same gotowce.

Wymuszenie HTTPS i jednej wersji adresu (z www albo bez) - najczęstsza potrzeba, jedna spójna reguła zamiast dwóch osobnych przekierowań łańcuszkiem:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://twojadomena.pl%{REQUEST_URI} [L,R=301]

Ten wariant prowadzi do wersji bez www. Jeśli Twoją wersją główną jest www, zamień warunek drugi na RewriteCond %{HTTP_HOST} !^www\. [NC] i cel na adres z www. Ważne: zanim to włączysz, certyfikat SSL musi już działać - inaczej wyślesz gości prosto na ostrzeżenie przeglądarki.

Pojedyncze przekierowanie starej podstrony (np. po zmianie struktury):

Redirect 301 /stara-oferta https://twojadomena.pl/oferta

Stara domena na nową, z zachowaniem ścieżek:

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

Na hostingu McProdukt strony działają na serwerze OpenLiteSpeed, który z pliku .htaccess wykonuje reguły RewriteRule i Redirect. Wyjątek to WordPress: adresy jego podstron nie istnieją jako pliki, więc serwer przekazuje je od razu do WordPressa, zanim zajrzy do .htaccess. Przekierowania starych adresów w WordPressie ustawiaj więc wtyczką Redirection, a wymuszenie HTTPS i wersję adresu z www albo bez - w ustawieniach domeny w panelu DirectAdmin.

Pułapka, którą widzimy stale: testowanie przekierowań w zwykłym oknie przeglądarki. Przeglądarka zapamiętuje przekierowania 301 bardzo agresywnie - po poprawce dalej widzisz stare zachowanie i wydaje się, że reguła nie działa. Testuj w trybie prywatnym albo poleceniem curl -I https://adres, które pokazuje nagłówki bez żadnego cache.

Jakie reguły bezpieczeństwa warto dodać do .htaccess?

Blokada podglądu katalogów - żeby wejście w katalog bez pliku index nie wyświetlało listy plików:

Options -Indexes

Ochrona wp-config.php - plik z hasłem do bazy nigdy nie powinien być osiągalny po HTTP:

<Files wp-config.php>
Require all denied
</Files>

Blokada wykonywania PHP w katalogu uploads - jedna z najskuteczniejszych barier po włamaniach: nawet jeśli komuś uda się wgrać złośliwy plik przez dziurawą wtyczkę, serwer go nie uruchomi. Utwórz osobny plik .htaccess w katalogu wp-content/uploads z zawartością:

<FilesMatch "\.php$">
Require all denied
</FilesMatch>

Ograniczenie logowania do własnego IP (tylko przy stałym łączu):

<Files wp-login.php>
Require ip 203.0.113.10
</Files>

Na hostingu McProdukt dyrektywy Require, Deny from i Allow from oraz ochrona hasłem zapisana w .htaccess nie działają - OpenLiteSpeed ich nie obsługuje. Te same blokady zapiszesz w głównym pliku .htaccess regułami przepisywania z flagą [F], która zwraca odpowiedź 403:

RewriteEngine On
RewriteRule ^wp-config\.php$ - [F,L]
RewriteRule ^wp-content/uploads/.*\.php$ - [F,L]

Logowanie do WordPressa tylko z Twojego adresu IP:

RewriteCond %{REMOTE_ADDR} !^203\.0\.113\.10$
RewriteRule ^wp-login\.php$ - [F,L]

Listowanie katalogów jest u nas wyłączone na poziomie serwera, więc Options -Indexes nie jest potrzebne, a hasło na katalog ustawisz w panelu DirectAdmin.

Te reguły to uzupełnienie, nie zamiennik pełnego zabezpieczenia strony - komplet praktyk zbiera poradnik 12 kroków hardeningu WordPressa. A jeśli chcesz zablokować podkradanie obrazków przez inne strony, dedykowane reguły znajdziesz w tekście o blokowaniu hotlinkingu.

Jak ustawić nagłówki cache w .htaccess?

Jeśli używasz LiteSpeed Cache, wtyczka ustawia to za Ciebie (sekcja Browser Cache) i poniższe nie jest potrzebne. Przy stronie bez wtyczki cache możesz ustawić czasy ważności ręcznie:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/webp "access plus 6 months"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>

Dzięki temu powracający gość nie pobiera ponownie grafik i stylów. Na naszym hostingu serwer sam ustawia 30-dniowy czas ważności dla obrazów, stylów, skryptów i fontów, więc tych reguł nie musisz dopisywać. Sensowną parą dla tych nagłówków jest kompresja odpowiedzi - opisana w tekście o gzip i brotli.

Co zrobić, gdy po zmianie .htaccess strona pokazuje błąd 500?

Internal Server Error tuż po edycji .htaccess to niemal zawsze błąd składni w tym, co właśnie dopisano. Procedura ratunkowa:

  1. Przywróć kopię pliku sprzed zmiany (masz ją, prawda?). Strona wraca natychmiast.
  2. Jeśli kopii nie ma - zmień nazwę pliku na .htaccess_off. Strona wstanie (WordPress bez swojego bloku pokaże błędy 404 na podstronach, ale główna zadziała), a Ty możesz spokojnie szukać literówki.
  3. Dopisuj reguły pojedynczo i po każdej sprawdzaj stronę. Znajdziesz winowajcę w minutę.

Na OpenLiteSpeed nieobsługiwane dyrektywy są pomijane, więc zamiast błędu 500 częściej zobaczysz regułę, która po prostu nie działa. Najczęstsze literówki: brak spacji po fladze, niezamknięty nawias sekcji <Files>, cudzysłowy „drukarskie" wklejone z Worda zamiast prostych. Więcej o samych kodach błędów - w przewodniku po błędach HTTP.

Czego nie robić w .htaccess?

  • Nie wklejaj hurtowo „mega zestawów bezpieczeństwa" z internetu. Listy po 200 linijek blokujące boty po nazwach sprzed dekady nic nie chronią, a utrudniają diagnostykę. Każda reguła, której nie rozumiesz, to przyszły problem.
  • Nie ustawiaj dyrektyw PHP przez php_value - na serwerach z PHP w trybie FPM lub LSAPI ta składnia kończy się błędem 500 albo jest po cichu pomijana. Limity PHP zmienia się w panelu; które i po co, opisuje tekst o ustawieniach php.ini na hostingu.
  • Nie buduj łańcuchów przekierowań. Stary adres - przekierowanie - kolejne przekierowanie - cel. Każdy skok to dodatkowe okrążenie; przekierowuj zawsze bezpośrednio do adresu końcowego.
  • Nie trzymaj reguł „na pamiątkę". Przy przejmowaniu stron po poprzednich wykonawcach regularnie znajdujemy w .htaccess przekierowania do domen, które nie istnieją od lat. Raz na jakiś czas przejrzyj plik i skasuj martwe wpisy.

Najczęściej zadawane pytania

Gdzie jest plik .htaccess?

W katalogu głównym strony - na większości hostingów to public_html, u nas domains/twojadomena.pl/public_html. Plik zaczyna się od kropki, więc jest ukryty: w FileZilli włącz Serwer → „Wymuś pokazywanie ukrytych plików".

Jak utworzyć plik .htaccess?

Najprościej w menedżerze plików panelu DirectAdmin: utwórz nowy plik o nazwie .htaccess, z kropką na początku i bez rozszerzenia. W Notatniku przy zapisie wpisz nazwę w cudzysłowie („.htaccess"), inaczej program dopisze .txt.

Czy .htaccess działa na serwerze Nginx?

Nie. Nginx nie czyta plików .htaccess - reguły wpisuje się w konfiguracji serwera, do której na hostingu współdzielonym zwykle nie masz dostępu. .htaccess działa na Apache i LiteSpeed, a OpenLiteSpeed wykonuje z niego głównie reguły przepisywania adresów.

Dlaczego reguła z .htaccess nie działa?

Najczęściej z trzech powodów: przeglądarka pamięta stare przekierowanie 301 (testuj w oknie prywatnym albo poleceniem curl -I), reguła stoi pod blokiem WordPressa, który obsłużył adres wcześniej, albo serwer nie obsługuje danej dyrektywy - OpenLiteSpeed pomija na przykład Require i Deny from.

Czy .htaccess spowalnia stronę?

Kilka czy kilkanaście reguł nie ma zauważalnego wpływu na szybkość. Problemem stają się dopiero setki linijek wklejonych z gotowych zestawów, które serwer sprawdza przy każdym żądaniu.

Podsumowanie

.htaccess najlepiej traktować jak skrzynkę z ostrymi narzędziami: kilka sprawdzonych reguł - wymuszenie HTTPS, przekierowania po zmianach adresów, blokada PHP w uploads, Options -Indexes - załatwia 95% potrzeb zwykłej strony firmowej. Wszystko ponadto dopisuj pojedynczo, z kopią zapasową i testem w trybie prywatnym po każdej zmianie.

Na naszym hostingu WWW z OpenLiteSpeed z .htaccess działają reguły RewriteRule i Redirect, a przekierowania w WordPressie najprościej ustawić wtyczką Redirection. Jeśli jakaś reguła nie chce zaskoczyć - napisz do pomocy, diagnozujemy takie rzeczy codziennie.

Powiązane poradniki

Wszystkie poradniki z kategorii: Hosting od podstaw

Powiązane usługi McProdukt

Zobacz również