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.
.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.
Ś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.
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 OnRewriteCond %{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 OnRewriteCond %{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.
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 OnRewriteRule ^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.
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 OnExpiresByType 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.
Internal Server Error tuż po edycji .htaccess to niemal zawsze błąd składni w tym, co właśnie dopisano. Procedura ratunkowa:
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.
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".
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.
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.
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.
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.
.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.
Wszystkie poradniki z kategorii: Hosting od podstaw