Plik .htaccess to jedno z najważniejszych narzędzi konfiguracyjnych na serwerach z silnikiem Apache lub LiteSpeed. Pozwala na poziomie pojedynczego katalogu sterować zachowaniem serwera www, wymuszać szyfrowanie, kierować ruchem, włączać kompresję przesyłanych danych czy zabezpieczać wrażliwe zasoby aplikacji przed nieuprawnionym dostępem.
Nieprzemyślana lub niepoprawna konfiguracja tego pliku może jednak prowadzić do błędów typu 500 Internal Server Error lub znacznego spowolnienia obsługi zapytań. Poznaj sprawdzone i bezpieczne reguły, które poprawią wydajność oraz wprowadzą porządek w Twoim serwisie.
Wymuszenie HTTPS i kanonicznej domeny (przekierowanie www / bez-www)
Jednym z pierwszych zadań realizowanych przez .htaccess jest ujednolicenie adresów URL w celu uniknięcia problemu powielania treści (Duplicate Content) w wyszukiwarkach oraz zapewnienie bezpiecznego połączenia szyfrowanego.
Przekierowanie całego ruchu na HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Wymuszenie domeny bez przedrostka www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Flaga R=301 nakazuje przeglądarce i robotom indeksującym zapisanie trwałego przekierowania w pamięci podręcznej. Precyzyjne sterowanie rodzajami przekierowań opisuje artykuł wyjaśniający, kiedy stosować przekierowanie 301 i 302 bez utraty mocy SEO.
Włączenie kompresji plików tekstowych (mod_deflate)
Kompresowanie kodu HTML, stylów CSS i skryptów JS przed ich przesłaniem przez sieć redukuje objętość danych nawet o 70–80%. Do włączenia kompresji Gzip na serwerze Apache służy moduł mod_deflate:
<IfModule mod_deflate.c>
# Kompresja najważniejszych typów MIME
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/javascript application/x-javascript application/json
AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</IfModule>
Konfiguracja buforowania w przeglądarce (mod_expires)
Aby przeglądarka użytkownika nie pobierała statycznych zasobów (grafiki, czcionki, arkusze stylów) przy każdym przeładowaniu podstrony, należy określić czas ich ważności w pamięci podręcznej za pomocą modułu mod_expires:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
# Obrazy i multimedia
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/avif "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
# CSS i JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
# Czcionki
ExpiresByType font/woff2 "access plus 1 year"
</IfModule>
Prawidłowe ustawienie pamięci podręcznej drastycznie przyspiesza ponowne wizyty w witrynie. Więcej o szczegółowej konfiguracji nagłówków dowiesz się z artykułu omawiającego, jak działa cache przeglądarki i nagłówki Cache-Control.
Zabezpieczenie serwera i blokowanie nieuprawnionego dostępu
Plik .htaccess świetnie sprawdza się jako pierwsza linia obrony przed atakami na strukturę plików i niepożądanym skanowaniem serwera.
Blokowanie podglądu katalogów (Directory Browsing)
Domyślnie, jeśli w katalogu brakuje pliku index.html lub index.php, serwer wyświetli listę wszystkich plików. Uniemożliwisz to jedną prostą dyrektywą:
Options -Indexes
Ochrona samego pliku .htaccess oraz plików konfiguracyjnych
<FilesMatch "^\.ht|config\.php|composer\.json">
Order allow,deny
Deny from all
</FilesMatch>
Blokowanie Hotlinkingu (kradzieży transferu obrazków)
Zapobiega bezpośredniemu osadzaniu Twoich zdjęć na zewnętrznych stronach internetowych, co mogłoby wyczerpywać pasmo Twojego serwera:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?twojadomena\.pl/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|avif)$ - [F,NC]
Pamiętaj przy tym, że ochrona samych plików to tylko część dbania o wydajność multimediów – równie istotne jest to, jak przeprowadzana jest optymalizacja grafiki na stronie pod kątem rozmiarów i formatów.
Uwagę na wydajność: kiedy unikać stosowania .htaccess?
Mimo ogromnej wygody, plik .htaccess ma jedną wadę architektoniczną: serwer Apache musi go odczytywać i parsować przy każdym pojedynczym zapytaniu HTTP trafiającym do katalogu.
Jeśli posiadasz pełny dostęp do serwera dedykowanego lub VPS, zalecanym podejściem wydajnościowym jest przeniesienie wszystkich reguł z pliku .htaccess bezpośrednio do głównego pliku konfiguracji wirtualnego hosta (httpd.conf lub site-available/000-default.conf) i wyłączenie obsługi plików dyrektywą AllowOverride None. Pozwoli to odciążyć procesor serwera i jeszcze bardziej skrócić czas reakcji aplikacji.