Najprzydatniejsze reguły htaccess dla WordPressa

Nie wiesz, do czego służy plik .htaccess? A może szukasz ciekawych reguł, którymi zabezpieczysz stronę oraz zoptymalizujesz jej działanie? Przedstawiamy najprzydatniejsze reguły htaccess dla WordPressa.

Nie wiesz, jak skonfigurować .htaccess pod WordPressa? Plik .htaccess pozwala skonfigurować nie tylko przekierowania, ale również zabezpieczyć stronę, zoptymalizować jej szybkość działania oraz dostosować sposób wyświetlania adresu internetowego.

Dla wielu osób edycja tego pliku może jednak być niejasna, a kod tam wpisany kompletnie niezrozumiały. Poniżej przedstawiamy najprzydatniejsze funkcje htaccess dla WordPressa, które możecie wykorzystać na swoich blogach i nie tylko.

Czym jest .htaccess i jak go edytować?

Plik .htaccess jest plikiem konfiguracyjnym hostingu lub serwera i umożliwia modyfikację ustawień dla poszczególnych katalogów i podkatalogów. Znajduje się on w głównym katalogu strony internetowej (tam, gdzie plik index.php lub index.html), a także w poszczególnych podkatalogach, dla których tworzone są specjalne reguły (jeśli jest taka konieczność).

Funkcje w pliku .htaccess służą np. do tworzenia przekierowań, do modyfikowania sposobu wyświetlania adresów internetowych, do zabezpieczania poszczególnych plików i folderów, do ustawiania uprawnień dostępu do danego folderu, a także do optymalizacji pod kątem SEO (wspomniane przekierowania i adresy).

Plik .htaccess można edytować za pomocą Notatnika, wpisując odpowiednie funkcje w formie tekstowej. Wystarczy skopiować plik z serwera do komputera (oraz stworzyć jego dodatkową kopię zapasową), a następnie otworzyć w Notatniku lub w programie Notepad++ (zalecane!) i dopisać odpowiednie reguły. Po edycji zapisujemy plik i wysyłamy go z powrotem na serwer w swoje oryginalne miejsce, nadpisując oryginalny plik.

Jeśli pojawi się konieczność stworzenia nowego pliku .htaccess (np. dla konkretnego podkatalogu, w którym oryginalnie nie ma tego pliku), to można to bardzo łatwo zrobić za pomocą systemowego Notatnika. Otwórz Notatnik, wklej odpowiednią funkcję, a następnie wybierz opcję “Plik > Zapisz jako”. W oknie zapisywania pliku jako typ wybierz “Wszystkie pliki”, a w nazwie wpisz tylko “.htaccess” (bez cudzysłowów).

Warto pamiętać, że oprócz domyślnych wartości, które WordPress tworzy automatycznie w pliku .htaccess, można dodać jeszcze swoje własne funkcje i reguły, które zabezpieczą stronę i odpowiednio ją zoptymalizują. Przykłady takich reguł znajdziecie poniżej.

1. Zabezpiecz plik wp-config.php przed niepowołanymi osobami

Za pomocą pliku .htaccess możemy zablokować dostęp do poszczególnych plików, tak, aby plik był niedostępny dla jakichkolwiek żądań. Wtedy dostęp do takich plików jest możliwy tylko bezpośrednio poprzez serwer FTP (a więc tylko dla administratora).

Możemy użyć tej funkcji, aby wprowadzić dodatkową warstwę ochrony dla pliku wp-config.php, w którym są wpisane wszystkie nasze dane dostępowe do bazy danych MySQL. Aby to zrobić, dopisz na samej górze pliku .htaccess poniższą funkcję:

<files wp-config.php>
order allow,deny
deny from all
</files>

Funkcja ta blokuje dostęp do pliku wp-config.php przez osoby, które chciałyby go wywołać innymi metodami niż dostęp bezpośredni z serwera FTP.

2. Zablokuj możliwość wykonywania skryptów PHP w poszczególnych folderach

Bardzo często ataki na strony WordPressa działają w taki sposób, że wykorzystują mniej zabezpieczone foldery do wykonania szkodliwych skryptów. W WordPressie takim folderem jest katalog wp-content/uploads/, w którym umieszczane są np. pliki dodane za pomocą poszczególnych wtyczek (np. obrazki dodane do galerii za pomocą wtyczki do poruszających się „sliderów”). Warto w tym folderze zablokować możliwość wykonywania skryptów.

Aby to zrobić, poniższa regułą musi zostać dodana do pliku .htaccess, który znajduje się w folderze uploads. Wejdź do katalogu /wp-content/uploads/ na serwerze i skopiuj stamtąd plik .htaccess. Jeśli go nie ma, to możesz stworzyć nowy plik tekstowy i nadać mu nazwę .htaccess. Następnie wpisz w tym pliku poniższą regułę:

<Files *.php>
deny from all
</Files>

Po zapisaniu pliku wyślij go do folderu wp-content/uploads na serwerze. Pamiętaj jednak, że niektóre motywy wymagają opcji wykonywania skryptów PHP w tym folderze. Gdyby po wprowadzeniu tej modyfikacji strona przestała się wyświetlać, to usuń powyższy kod.

3. Zablokuj skanowanie autorów w WordPressie

Popularnym sposobem na zhakowanie strony jest uruchomienie skryptu, który skanuje naszą stronę w poszukiwaniu nazwy użytkownika autora publikującego posty na stronie z WordPressem. Gdy skrypt zbierze nazwy użytkowników, to następnie próbuje włamać się na stronę metodą słownikową (brute-force), wprowadzając wszystkie możliwe kombinacje hasła.

Można zablokować możliwość skanowania strony w poszukiwaniu autorów. W tym celu w pliku .htaccess należy dodać poniższą funkcję:

# BEGIN blokowanie skanowania
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (author=d+) [NC]
RewriteRule .* - [F]
# END blokowanie skanowania

4. Wyłącz funkcję XML-RPC poprzez .htaccess

Domyślnie instalacja WordPressa posiada plik o nazwie xmlrpc.php. Plik ten umożliwia zewnętrznym narzędziom na połączenie się z naszą stroną. Jest to przydatne, gdy np. korzystamy z zewnętrznych programów czy usług do publikowania postów na WordPressie.  Jeśli jednak niczego takiego nie używamy i łączymy się z WordPressem tylko klasycznie przez panel administratora, to eksperci zalecają wyłączenie tej opcji.

XML-RPC można wyłączyć właśnie za pomocą .htaccess. W tym celu należy dodać poniższą funkcję do pliku .htaccess:

<Files xmlrpc.php>
order deny,allow
deny from all
</Files>

5. Zabezpiecz panel administratora dodatkowym hasłem

Plik .htaccess pozwala ograniczyć dostęp do wybranego folderu hasłem. Możemy to wykorzystać do dodatkowego zablokowania hasłem dostępu do folderu wp-admin, a więc do panelu administracyjnego. Gdy z tego skorzystamy, to przy próbie wejścia na stronę logowania do WordPressa wyświetli się dodatkowa prośba o podanie loginu i hasła. W ten sposób panel WordPressa zabezpieczamy nie jednym, a dwoma hasłami.

Aby to zrobić, musisz mieć plik .htaccess w folderze wp-admin – jeśli taki plik już masz w tym katalogu, to skopiuj go na komputer i otwórz w Notatniku. Jeśli takiego pliku nie masz, to utwórz nowy dokument tekstowy w Notatniku, umieść w nim poniższy fragment i zapisz plik jako .htaccess (na samym początku pokazaliśmy, jak stworzyć nowy plik .htaccess i odpowiednio go zapisać, aby program nie dodał zbędnego rozszerzenia do nazwy).

AuthName "Dostep ograniczony haslem"
AuthType Basic
AuthUserFile /home/platne/loginserwera/public_html/katalognaserwerze/.htpasswd
Require valid-user

Bardzo istotny jest tu wiersz AuthUserFile, wskazujący na plik .htpasswd, w którym będziemy przechowywać login i hasło w zabezpieczonej formie. Tego pliku jeszcze nie mamy (zaraz go stworzymy), ale możemy już wpisać w tym miejscu ścieżkę, w której zamierzamy go umieścić.

Powyższa ścieżka AuthUserFile jest przygotowana pod serwer LH – wystarczy, że zmienisz loginserwera na swój własny login w LH, a zamiast katalognaserwerze wpiszesz ścieżkę do folderu, w którym zamierzasz umieścić plik .htpasswd. Przykładowo, jeśli zamierzasz umieścić plik .htpasswd w folderze „wp-admin”, a cała twoja strona jest umieszczona w folderze „wordpress”, to ścieżka będzie wyglądać następująco:

AuthUserFile /home/platne/loginserwera/public_html/wordpress/wp-admin/.htpasswd

Zmodyfikuj ścieżkę odpowiednio pod swój serwer i folder, w którym umieścisz plik .htpasswd. Następnie zapisz plik .htaccess i prześlij go do folderu wp-admin w katalogu z WordPressem na serwerze.

Kolejnym krokiem jest utworzenie pliku .htpasswd, zawierający login i hasło, którymi zabezpieczysz dostęp do strony logowania. Skorzystamy w tym celu z kreatora .htpasswd.

Wejdź do kreatora i wpisz w formularzu login oraz hasło, którymi chcesz zabezpieczyć dostęp do strony logowania. Pamiętaj, aby wpisać zupełnie inne dane niż te, których używasz do logowania w panelu WordPressa – tylko wtedy ma sens dodawanie kolejnej warstwy logowania.

Po potwierdzeniu wyświetli się kod, który musisz skopiować, a następnie wkleić do nowego dokumentu w Notatniku.

Po wklejeniu zapisz ten plik jako .htpasswd, a następnie skopiuj do folderu, który wskazałeś w ścieżce AuthUserFile w pliku .htaccess. Teraz, gdy spróbujesz wejść na stronę logowania do panelu WordPressa, to pojawi się najpierw prośba o podanie loginu i hasła z pliku .htpasswd. Dopiero gdy wpiszemy poprawne dane, to pojawi się ekran logowania do WordPressa, w którym wpisujemy już swoje standardowe hasło do konta administratora lub redaktora.

6. Udziel dostępu do panelu administratora tylko dla wybranych IP

Istnieje możliwość zablokowania panelu administratora WordPressa (czyli folderu wp-admin) dla wszystkich osób poza tymi, których adresy IP znajdują się w pliku .htaccess. Jest to dobre rozwiązanie, gdy administratorzy lub redaktorzy mają stały adres IP.

Aby to zrobić, należy wpisać poniższy fragment do pliku .htaccess, który znajduje się w folderze wp-admin. Jeśli nie masz tam pliku .htaccess, to utwórz nowy. Następnie wpisz w nim poniższy kod:

AuthUserFile /dev/null
# AuthGroupFile /dev/null
AuthName "Blokada dostępu do panelu WordPressa"
AuthType Basic
<LIMIT GET>
order deny,allow
deny from all
allow from xx.xx.xx.xx
</LIMIT>

W wierszu allow from należy zmienić xx.xx.xx.xx na adres IP, który ma mieć dostęp do panelu. Jeśli chcemy wpisać kilka adresów IP, to po prostu tworzymy kilka linii allow from (jedna pod drugą) i wpisujemy w każdej linii inny adres IP.

Pamiętaj jednak, że to rozwiązanie jest bardzo nieodpowiednie, gdy masz zmienny adres IP – wtedy po zmianie IP nie będziesz mógł się zalogować na swoją stronę i konieczne będzie usunięcie tych linii z pliku .htaccess lub wprowadzenie nowego adresu IP.

7. Zablokuj dostęp do strony z wybranych adresów IP

Jeśli masz problem z natrętnymi użytkownikami lub widzisz w rejestrze połączeń serwera, że z jakiegoś adresu IP jest zbyt duża ilość połączeń, to możesz taki adres zablokować. Wtedy osoby z wybranych adresów IP nie będą mogły się połączyć ze stroną.

W tym celu otwórz .htaccess w głównym folderze WordPressa i dopisz do niego poniższy fragment:

<Limit GET POST>
order allow,deny
deny from xx.xx.xx.xx
allow from all
</Limit>

W wierszu deny from należy zmienić xx.xx.xx.xx na adres IP, który chcesz zbanować. Możesz zdublować ten wiersz i w każdej linii wpisać inny adres IP do zablokowania.

8. Wyłącz hotlinkowanie zdjęć z twojego serwera

Masz stronę, na której znajduje się duża ilość zdjęć – mogą to być zdjęcia twoich projektów (strona typu portfolio) lub mogą to być zdjęcia dodane do wpisów na twoim blogu. Zdarza się, że inni chcą je umieścić na swoich stronach internetowych i robią to w sposób bezpośredni – kopiując adres URL do zdjęcia na twoim serwerze i wklejając je do siebie. Wtedy zdjęcia na ich stronach są ładowane z twojego serwera. Jest to tzw. hotlinkowanie.

Z oczywistych względów możemy to zablokować, aby inne strony nie pożerały naszego miesięcznego limitu transferu na serwerze, a także żeby niepotrzebnie nie obciążały naszego serwera dodatkowych ruchem. Adres do obrazka nadal będzie można skopiować ze strony (i link do niego będzie działać), ale gdy ktoś spróbuje wkleić ten obrazek u siebie na stronie, „ciągnąc go” z naszego serwera, to wtedy się nie wyświetli. W tym celu należy dodać poniższą formułę do pliku .htaccess:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?domena.pl [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.pl [NC]
RewriteRule .(jpg|jpeg|png|gif)$ – [NC,F,L]

W powyższym fragmencie musisz zmienić domena.pl na twój adres strony. Funkcja ta sprawia, że zdjęcia umieszczone na twoim serwerze mogą wyświetlać się tylko w twojej domenie internetowej, a także na stronach google.com oraz google.pl (dzięki temu nie zablokujemy możliwości wyświetlania naszych zdjęć w Grafice Google). Hotlinkowanie na innych stronach będzie niemożliwe.

9. Tworzenie przekierowań 301 poprzez .htaccess

Za pomocą .htaccess możesz tworzyć przekierowania na stronie np. na nowy adres lub na domenę z uwzględnieniem przedrostka WWW (lub bez niego), a także wiele przekierowań, które są bardzo przyjazne pod kątem SEO.

  • Przekierowanie 301 np. podczas zmiany struktury adresu w WordPressie

Jeśli zmieniasz strukturę adresów na swojej stronie (np. aby uwzględnić w adresie kategorie lub podkategorie) i zmianie ulegną adresy istniejących postów, to warto stworzyć odpowiednie przekierowanie w .htaccess, aby nie utracić pozycji w wyszukiwarkach internetowych.

Załóżmy, że zmieniliśmy nazwę kategorii z Artykuły na Recenzje. Zmieniła się również ścieżka dostępu w adresie z “domena.pl/artykuly/nazwa-wpisu” na “domena.pl/recenzje/nazwa-wpisu”. Aby utrzymać naszą pozycję w wyszukiwarce, warto stworzyć przekierowanie, które sprawi, że osoba wchodząca ze starego adresu ze ścieżką wskazującą na /artykuly/ zostanie automatycznie przekierowana na nową ścieżkę z kategorią /recenzje/. Wtedy stworzymy taką funkcję, jak poniżej:

RewriteEngine on
RewriteBase /
RewriteRule ^artykuly/(.*) http://domena.pl/recenzje/$1 [R=301,L]

Powyższy kod sprawia, że fragment ścieżki o nazwie /artykuly/ zostanie automatycznie przekierowany na /recenzje/. Każdy, kto spróbuje wejść przez stary adres zostanie automatycznie przekierowany na ten nowy. Możesz w ten sposób stworzyć własne przekierowania, uwzględniając swój adres i fragmenty adresu URL.

  • Przekierowanie 301 na adres z WWW lub bez WWW

Ze względu na pozycjonowanie w wyszukiwarce warto posiadać jedną wersję adresu – z WWW lub bez WWW. Wynika to z tego, że dla wyszukiwarek przedrostek WWW jest traktowany jako subdomena, a więc poniekąd jako osobny serwis. Aby temu zaradzić, należy wybrać jedną formę, którą preferujemy (np. bez WWW), a następnie ustawić dla tej drugiej przekierowanie.

Poniżej znajdują się dwa schematy – jednak dla przekierowania na „bez WWW”, a drugi na przekierowanie „z WWW”.

Dla przekierowania na adres z WWW:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domena.pl [NC]
RewriteRule ^(.*)$ http://www.domena.pl/$1 [L,R=301]

Dla przekierowania na adres bez WWW:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.domena.pl [NC]
RewriteRule ^(.*)$ http://domena.pl/$1 [L,R=301]

Należy wybrać odpowiedni dla nas fragment, a następnie w polach domena.pl wpisać adres swojej domeny.

  • Przekierowanie 301 ze starej domeny na nową

Zmieniłeś całkowicie adres strony na inny? Daj znać swoim odwiedzającym oraz robotowi Google. Możesz stworzyć proste przekierowanie, takie jak poniżej:

RewriteEngine On
RewriteRule ^(.*)$ http://nowadomena.pl/$1 [R=301,L]

W polu nowadomena.pl wpisz swój nowy adres strony internetowej.

  • Przekierowanie na adres chroniony przez SSL

Jeśli masz wykupiony certyfikat SSL, to twoja strona w zabezpieczonej formie otwiera się z przedrostkiem „https://”. Jeśli chcesz zawsze oferować stronę w takiej formie, to upewnij się, że masz w pliku .htaccess poniższy fragment, który każdą próbę wejścia na twoją stronę przekieruje na adres uwzględniający SSL.

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://domena.pl

Tak samo, jak w przykładach powyżej, jedynie co musisz zrobić, to zamiast domena.pl wpisać swój adres.

10. Zabezpiecz plik .htaccess przed niepowołanym dostępem

Zabezpieczając WordPressa warto też pamiętać o tym, aby również zabezpieczyć plik .htaccess przed niepowołanymi osobami. Podobnie jak plik wp-config.php można go zablokować odpowiednią dyrektywą, aby nikt nie uzyskał do niego dostępu poprzez inne metody niż połączenie z serwerem. Wystarczy dodać poniższy kod do głównego pliku .htaccess:

<files ~ "^.*.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
Darmowy kurs WordPress
Poradnik WordPress
Artykuł odpowiedział na twoje pytanie? Udostępnij go dalej:
Obrazek domyślny
Błażej Starosta
Ma doświadczenie w tworzeniu oraz prowadzeniu stron WWW, od blogów aż po sklepy internetowe. Od lat uważnie śledzi rozwój WordPressa i jego wpływ na rynek twórców stron internetowych. Stara się być na bieżąco ze wszystkimi nowinkami technologicznymi i dzielić się swoją wiedzą.

9 komentarzy

  1. Jedna uwaga – plik .htpasswd powinien być wyprowadzony poza katalog publiczny. Bezpieczeństwa nigdy za wiele.

  2. Bardzo przydatny artykuł. A przy okazji mam jedno pytanie: czy da się wyłączyć hotlinkowanie innych plików? Na swojej stronie udostępniam sporo plików .zip, ale chciałbym aby były dostępne tylko z poziomu mojej strony. Czyli byłoby super aby wszystkie strony “podkradające” moje linki do plików zip zablokowało…

  3. Oj 🙁 Niedobrze. Czy możesz zamieścić screen, jak to wygląda u Ciebie oraz urządzenie, z którego korzystasz?

  4. Bardzo dużo cennej wiedzy przekazanej w tak przystępny sposób, że może się odważę i spróbuję z masową zmianą linków, bo chciałabym właśnie uwzględnić w adresie kategorie. Dokładnie tej informacji szukałam. Dziękuję!

  5. Bardzo fajna ściąga dotycząca pliku .htaccess . Dodaję stronę do ulubionych i będę z miłą chęcią podsyłał innym, którzy tworzą strony w oparciu o WordPressa!


    Pozdrawiam
    Roman Rozenberger
    https://rozenberger.com

  6. Coś jest nie tak z pkt. 6 – stworzyłem .htaccess, skopiowałem zawartość podmieniając IP, ale przy próbie wywołania (z prawidłowym IP) pojawia się Internal Server Error 500. Poniższy kod (trochę zmieniony) działa:

    AuthName “Blokada dostępu do panelu WordPressa”
    AuthType Basic

    order deny,allow
    deny from all
    allow from xxx.xxx.xxx.xxx

Możliwość komentowania została wyłączona.