.htaccess – co to jest, jak działa i najważniejsze reguły dla WordPress i SEO

.htaccess to plik konfiguracyjny serwera Apache, który kontroluje zachowanie Twojej strony – przekierowania, bezpieczeństwo, cache, blokowanie IP, ochrona plików, permalinki WordPress i dziesiątki innych ustawień. Leży w katalogu głównym strony (obok wp-config.php) i jest czytany przy każdym żądaniu HTTP. Jedna literówka w .htaccess = błąd 500 na całej stronie. Dlatego: zawsze rób backup przed edycją.

Co to jest .htaccess i jak działa

.htaccess (Hypertext Access) to plik tekstowy, który Apache czyta przy każdym żądaniu do serwera. Zawiera dyrektywy – instrukcje mówiące Apache jak obsłużyć żądanie: „przekieruj ten URL na inny”, „zablokuj dostęp z tego IP”, „włącz cache na 30 dni”, „wymuś HTTPS”.

Plik zaczyna się od kropki (.) – w systemach Linux/macOS oznacza plik ukryty. W FileZilla: włącz „Wymuś wyświetlanie ukrytych plików” (Serwer → Force showing hidden files), żeby go zobaczyć.

Działa na Apache i LiteSpeed – nie na Nginx. Jeśli Twój hosting używa Nginx (bez Apache frontend): .htaccess jest ignorowany. Sprawdź u hostingu lub przez nagłówek odpowiedzi: curl -I twojadomena.pl | grep Server.

Domyślny .htaccess WordPress

WordPress generuje .htaccess automatycznie (Ustawienia → Bezpośrednie odnośniki → Zapisz). Domyślna zawartość:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Te reguły robią jedno: przepisują URL-e – każde żądanie, które nie jest fizycznym plikiem lub folderem, trafia do index.php (WordPress). Dzięki temu permalinki (/artykul/tytul/) działają zamiast ?p=123.

NIGDY nie edytuj bloku między # BEGIN WordPress i # END WordPress – WordPress nadpisuje ten blok przy każdym zapisaniu permalinków. Twoje reguły dodawaj przed # BEGIN WordPress lub po # END WordPress.

Najważniejsze reguły .htaccess dla SEO

Wymuszenie HTTPS

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Każde żądanie HTTP → przekierowanie 301 na HTTPS. Wymagane dla SEO (HTTPS to ranking factor) i bezpieczeństwa. Dodaj przed blokiem WordPress.

Wymuszenie www lub bez www

# Z www (twojadomena.pl → www.twojadomena.pl)
RewriteCond %{HTTP_HOST} ^twojadomena\.pl [NC]
RewriteRule ^(.*)$ https://www.twojadomena.pl/$1 [L,R=301]

# LUB bez www (www.twojadomena.pl → twojadomena.pl)
RewriteCond %{HTTP_HOST} ^www\.twojadomena\.pl [NC]
RewriteRule ^(.*)$ https://twojadomena.pl/$1 [L,R=301]

Wybierz jedną wersję (www lub bez) i trzymaj się jej. Dwie wersje = duplikat treści = problem SEO. Google traktuje twojadomena.pl i www.twojadomena.pl jako dwa osobne adresy.

Przekierowanie 301 (trwałe)

# Pojedynczy URL
Redirect 301 /stary-artykul https://twojadomena.pl/nowy-artykul

# Cała domena na nową
RewriteRule ^(.*)$ https://nowadomena.pl/$1 [L,R=301]

Przekierowanie 301 przenosi autorytet SEO ze starego URL na nowy (~90% link juice). Używaj przy: zmianie URL-i (slug), usuwaniu stron (redirect na najbliższą tematycznie), zmianie domeny. Nie używaj 302 (tymczasowe) dla trwałych zmian – Google nie przeniesie autorytetu.

Najważniejsze reguły .htaccess dla wydajności

Browser cache (Expires headers)

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-font-woff2 "access plus 1 year"
</IfModule>

Mówi przeglądarce: „cache’uj obrazki na rok, CSS/JS na miesiąc”. Użytkownik odwiedza stronę drugi raz → przeglądarka nie pobiera zasobów ponownie → strona ładuje się znacznie szybciej. Poprawia Core Web Vitals (LCP).

Kompresja Gzip / Deflate

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css
AddOutputFilterByType DEFLATE application/javascript application/json
AddOutputFilterByType DEFLATE application/xml text/xml
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>

Kompresuje pliki tekstowe (HTML, CSS, JS, JSON, XML, SVG) przed wysłaniem do przeglądarki. Zmniejsza rozmiar transferu o 60–80%. Jeśli hosting ma LiteSpeed: używaj Brotli zamiast Gzip (lepsza kompresja, włączany w panelu LiteSpeed, nie w .htaccess).

Najważniejsze reguły .htaccess dla bezpieczeństwa

Ochrona wp-config.php

<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>

wp-config.php zawiera hasło do bazy danych – nikt z zewnątrz nie powinien mieć do niego dostępu. Ta reguła blokuje dostęp HTTP (nie wpływa na PHP – WordPress nadal może go czytać lokalnie).

Ochrona .htaccess

<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

Blokowanie dostępu do xmlrpc.php

<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>

xmlrpc.php to stary interfejs API WordPressa – główny wektor ataków brute force i DDoS amplification. Jeśli nie używasz: Jetpack, aplikacji mobilnej WordPress, pingbacków – zablokuj. REST API zastępuje xmlrpc w nowoczesnym WordPress.

Blokowanie IP

# Zablokuj konkretne IP
Deny from 123.456.789.0

# Zablokuj zakres
Deny from 123.456.

# Pozwól tylko z konkretnego IP (np. wp-admin)
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 89.64.12.34
</Files>

Blokowanie hotlinkingu (kradzież obrazków)

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?twojadomena\.pl [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC,L]

Hotlinking = ktoś wstawia <img src="https://twojadomena.pl/zdjecie.jpg"> na swojej stronie – Twój serwer serwuje obrazek, Ty płacisz za transfer, on ma darmowe zdjęcie. Ta reguła blokuje serwowanie obrazków dla stron innych niż Twoja.

Diagnostyka – co robić gdy .htaccess psuje stronę

Błąd 500 po edycji .htaccess:

  1. FTP → zmień nazwę .htaccess na .htaccess-broken.
  2. Odśwież stronę – jeśli działa, problem jest w .htaccess.
  3. Porównaj z backupem – znajdź regułę, która powoduje błąd.
  4. Przywróć domyślny .htaccess WordPress: wp-admin → Ustawienia → Bezpośrednie odnośniki → Zapisz.
  5. Dodawaj reguły po jednej, testując po każdej.

Najczęstsze błędy: brakujący </IfModule> (niezamknięty tag), literówka w nazwie dyrektywy, użycie dyrektywy nieobsługiwanej przez serwer (np. php_value na serwerze z PHP-FPM), podwójne RewriteEngine On.

.htaccess a Nginx

Nginx nie obsługuje .htaccess – konfiguracja jest w pliku nginx.conf (lub /etc/nginx/sites-available/). Jeśli Twój hosting używa Nginx: reguły .htaccess nie działają. Odpowiedniki: przekierowania → return 301 w server block, cache → expires w location block, blokowanie → deny all w location. Na hostingu z Nginx: pytaj support o konfigurację (nie masz bezpośredniego dostępu do nginx.conf na shared hosting).

LiteSpeed obsługuje .htaccess – jest kompatybilny z Apache. Reguły .htaccess na LiteSpeed działają tak samo.

Najczęściej zadawane pytania

Gdzie jest plik .htaccess?

W katalogu głównym WordPressa (obok wp-config.php, wp-content/, index.php). Jeśli go nie widzisz: włącz widoczność plików ukrytych w FTP (pliki zaczynające się od kropki są ukryte domyślnie). Jeśli nie istnieje: WordPress → Ustawienia → Bezpośrednie odnośniki → Zapisz → WordPress go wygeneruje.

Czy mogę mieć kilka .htaccess?

Tak – .htaccess w katalogu działa na ten katalog i podkatalogi. Możesz mieć osobny .htaccess w /wp-admin/ (dodatkowe zabezpieczenia) i w /wp-content/uploads/ (blokowanie wykonywania PHP w folderze uploadów). Główny .htaccess (w root) obowiązuje na całą stronę.

Czy .htaccess spowalnia stronę?

Minimalnie – Apache czyta .htaccess przy każdym żądaniu (w odróżnieniu od nginx.conf, który jest czytany raz przy starcie). Przy prostym .htaccess (20–30 linii): wpływ niewidoczny. Przy rozbudowanym (200+ reguł RewriteRule): może dodać 1–5 ms per żądanie. Dla 99% stron: nie problem.

Czy wtyczki WordPress modyfikują .htaccess?

Tak – wiele wtyczek dodaje reguły: LiteSpeed Cache (reguły cache), Wordfence (WAF rules), Yoast SEO (przekierowania), W3 Total Cache (cache headers), iThemes Security (zabezpieczenia). Wtyczki dodają swoje bloki między # BEGIN i # END NazwaWtyczki. Nie edytuj tych bloków ręcznie – wtyczka je nadpisze.

Jak przetestować reguły .htaccess przed wdrożeniem?

Na stagingu – sklonuj stronę, edytuj .htaccess na kopii, sprawdź czy działa. Na produkcji: (1) backup .htaccess, (2) dodaj regułę, (3) odśwież stronę, (4) jeśli 500 → przywróć backup przez FTP. Cały cykl trwa sekundy – bo FTP jest szybki.

Picture of Tomasz Zieliński
Tomasz Zieliński

Tomasz zajmuje się tematyką SEO, sztucznej inteligencji i automatyzacji pracy w marketingu internetowym. W swoich artykułach analizuje zmiany w algorytmach wyszukiwarek, rozwój narzędzi AI oraz nowe sposoby tworzenia i optymalizacji treści. Interesuje go przede wszystkim to, jak technologia wpływa na codzienną pracę specjalistów SEO, marketerów i twórców internetowych.

Facebook
Twitter
LinkedIn
Pinterest

Najnowsze Wpisy

Śledź nas