Articles

Articles

Articles

Co to jest .htaccess i jak go dodać?

February 1, 2025

Poniżej znajdziesz obszerny poradnik na temat pliku .htaccess w serwerze Apache, w formie wpisu blogowego. Zawiera omówienie najważniejszych zagadnień, praktyczne przykłady konfiguracji oraz wskazówki dotyczące bezpieczeństwa i optymalizacji wydajności.

1. Podstawy .htaccess

Co to jest .htaccess i jak działa?

Plik .htaccess (Hypertext Access) to plik konfiguracyjny serwera Apache, który umożliwia lokalne nadpisywanie domyślnych ustawień serwera w wybranym katalogu oraz jego podkatalogach. Dzięki niemu możesz wprowadzać reguły przekierowań, zabezpieczać zasoby czy konfigurować strony błędów – bez edytowania głównego pliku konfiguracyjnego Apache.

Kiedy serwer otrzymuje żądanie, sprawdza, czy w obsługiwanym katalogu (i katalogach nadrzędnych) znajduje się plik .htaccess. Jeśli go znajdzie, przetwarza zawarte w nim reguły. Uprawnienia do nadpisywania ustawień definiuje dyrektywa AllowOverride w głównej konfiguracji Apache. Na większości hostingów współdzielonych obsługa .htaccess jest domyślnie włączona.

Uwaga: stosowanie .htaccess jest bardzo wygodne, bo zmiany działają natychmiastowo i nie wymagają restartu serwera. Ma to jednak niewielki wpływ na wydajność, gdyż przy każdym żądaniu serwer sprawdza istnienie i zawartość .htaccess.

Jak aktywować i edytować .htaccess?

  1. Aktywacja: Upewnij się, że w konfiguracji Apache (najczęściej w pliku httpd.conf lub wirtualnych hostach) dla danej lokalizacji ustawiona jest dyrektywa AllowOverride All lub przynajmniej AllowOverride z wartościami obejmującymi interesujące Cię dyrektywy (np. FileInfo, AuthConfig itp.).

  2. Edycja: Plik .htaccess to zwykły plik tekstowy z kropką na początku nazwy. Na Windows bywa niewidoczny – trzeba włączyć wyświetlanie ukrytych plików lub wprowadzić nazwę w cudzysłowach. Na serwerze możesz edytować go przez FTP lub w panelu hostingowym (z włączoną opcją pokazywania plików ukrytych).

  3. Składnia: Dyrektywy konfiguracyjne wpisujemy w osobnych liniach. Linie zaczynające się od # to komentarze. Błędy składni mogą spowodować błąd 500 (Internal Server Error).

Jeżeli Twoja reguła nie działa, sprawdź, czy wymagany moduł Apache (np. mod_rewrite, mod_deflate, mod_expires) jest włączony. Dobrą praktyką jest otaczanie reguł blokiem <IfModule> – dzięki temu unikniesz błędów przy braku modułu.

2. Przekierowania

Przekierowanie 301 i 302

  • 301 (Moved Permanently) – stałe przekierowanie, informuje wyszukiwarki i przeglądarki, że dany adres URL przeniesiono na stałe. Ten typ przekierowania przekazuje też “moc SEO” ze starego adresu na nowy.

  • 302 (Found / Moved Temporarily) – przekierowanie tymczasowe, przydatne, gdy dany URL jest chwilowo niedostępny i chcemy, by wyszukiwarki nie traktowały nowego adresu jako docelowego.

Do najprostszych przekierowań możemy użyć modułu mod_alias i dyrektywy Redirect:


Bardziej złożone reguły (zwłaszcza z wyrażeniami regularnymi) konfigurujemy w mod_rewrite:

RewriteEngine On
RewriteRule ^kategoria/([0-9]+)/?$ /nowa-kategoria.php?id=$1 [L,R=301]

Przekierowanie HTTP na HTTPS

Aby wymusić szyfrowane połączenie, możesz przekierować cały ruch z HTTP na HTTPS:

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

W ten sposób każda próba wejścia przez HTTP jest trwale przekierowywana na odpowiednik HTTPS.

Ustawienie adresu kanonicznego (www lub bez www)

Unikniesz duplikacji treści, gdy zadbasz, by Twoja witryna była dostępna tylko w jednej wersji – np. bez www.

Przekierowanie na wersję z www:

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

Przekierowanie na wersję bez www:

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

Przekierowania w oparciu o User-Agent

Możesz przekierowywać użytkowników w zależności od identyfikatora przeglądarki (User-Agent). Przykładowo do wersji mobilnej:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "Android|webOS|iPhone|BlackBerry|Mobile" [NC]
RewriteRule ^(.*)$ https://m.twojadomena.pl/$1 [L,R=302]

3. Zabezpieczenia

Blokowanie dostępu na podstawie adresu IP

Możesz zablokować określone adresy IP lub całe bloki:

Apache 2.2 (stara metoda):


Apache 2.4 (nowsza metoda):

<RequireAll>
  Require all granted
  Require not ip 203.0.113.45
  Require not ip 198.51.100.0/24
</RequireAll>

Możesz też odwrotnie – pozwalać tylko wybranym adresom, resztę blokować.

Ochrona katalogów hasłem (Basic Auth)

Plik .htaccess w chronionym katalogu:


Plik .htpasswd zawiera pary login:zaszyfrowane_hasło. Gdy użytkownik wejdzie do folderu, serwer poprosi o login i hasło.

Zapobieganie hotlinkowaniu

Hotlinking polega na osadzaniu Twoich obrazów na zewnętrznych stronach, co zużywa Twój transfer. Blokada:

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

Blokowanie określonych User-Agentów

Jeśli w logach widzisz złośliwe boty o konkretnych nazwach User-Agent, możesz je zablokować:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BadBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EvilCrawler [NC]
RewriteRule .* - [F]

Ograniczenie dostępu do plików i katalogów

  • Wyłączenie listowania katalogów (błąd 403 przy braku pliku indeksowego):

  • Blokada wrażliwych plików:

    <FilesMatch "^\.ht">
      Require all denied
    </FilesMatch>

    Chroni pliki .htaccess, .htpasswd i inne zaczynające się od .ht.

  • Zablokuj wybrane rozszerzenia:

    <FilesMatch "\.(ini|bak|old|sql)$">
      Require all denied
    </FilesMatch>
  • Zabezpieczenie folderu uploads (uniemożliwienie wykonania plików .php wrzuconych do folderu):

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

4. Optymalizacja wydajności

Włączenie kompresji Gzip

Redukuje rozmiar danych przesyłanych do przeglądarki. W .htaccess:

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

Dzięki temu pliki tekstowe (HTML, CSS, JS, JSON) są automatycznie pakowane przed wysłaniem.

Ustawienie cache przeglądarki (mod_expires)

Przeglądarka przechowuje pliki statyczne przez określony czas, co przyspiesza kolejne wizyty:

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 2 days"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png  "access plus 1 month"
  ExpiresByType image/gif  "access plus 1 month"
  ExpiresByType text/css   "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
  ExpiresByType text/html  "access plus 5 minutes"
</IfModule>

Ograniczenie liczby zapytań HTTP

Liczba żądań decyduje o szybkości ładowania strony. Z punktu widzenia .htaccess ważne są głównie:

  • Włączenie cache – aby użytkownik nie pobierał tych samych plików przy każdej wizycie.

  • Kompresja – mniejsze rozmiary plików.

  • Keep-Alive – aby używać jednego połączenia dla wielu zapytań.

Resztę (łączenie CSS/JS w jeden plik, sprity, lazy loading) wdrażasz po stronie kodu strony.

Konfiguracja Keep-Alive

Pozwala utrzymać jedno połączenie TCP dla wielu plików. Jeśli jest wyłączone na serwerze, można spróbować wymusić w .htaccess:

<IfModule mod_headers.c>
  Header set Connection keep-alive
</IfModule>

Jeśli hosting tego nie respektuje, konieczna jest zmiana w głównej konfiguracji Apache albo w panelu zarządzania serwerem.

5. Inne przydatne ustawienia

Przepisywanie URL-i (mod_rewrite)

Dzięki mod_rewrite możesz tworzyć przyjazne adresy URL. Przykład przepisywania /produkt/123 do produkt.php?id=123:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^produkt/([0-9]+)/?$ produkt.php?id=$1 [L,QSA]

Jest to wewnętrzne przepisywanie – użytkownik nadal widzi /produkt/123.

Strony błędów (404, 403 itp.)

Możesz zastąpić domyślne komunikaty błędów własnymi stronami:


Plik 404.html powinien istnieć w podanej ścieżce. Dzięki temu użytkownicy zobaczą spersonalizowaną stronę, a serwer zwróci właściwy kod błędu.

Ustawienia MIME i obsługa plików

  • AddType – pozwala wymusić określony typ MIME dla danych rozszerzeń:

    
    
  • AddDefaultCharset UTF-8 – ustawia domyślne kodowanie znaków na UTF-8.

  • AddHandler – można wskazać, że np. pliki .php5 są interpretowane przez PHP:

  • Nagłówki bezpieczeństwa (CORS, CSP) – np.:

    <IfModule mod_headers.c>
      Header set Access-Control-Allow-Origin "*"
    </IfModule>

    To temat rzeka, ale .htaccess jest dobrym miejscem na ustawianie dodatkowych nagłówków.

Podsumowanie

Plik .htaccess to potężne narzędzie, które pozwala na:

  • Elastyczne przekierowania (301, 302, adres kanoniczny, wymuszenie HTTPS).

  • Skuteczne zabezpieczenia (ochrona hasłem, blokady IP, blokady UA, zapobieganie hotlinkom).

  • Optymalizację wydajności (kompresja Gzip, cache przeglądarki, Keep-Alive).

  • Konfigurację stron błędów, przepisywanie URL-i, ustawienia MIME i wiele innych.

Każda zmiana w .htaccess zaczyna działać natychmiast, dzięki czemu jest idealnym rozwiązaniem na hostingach współdzielonych. Trzeba jednak pamiętać, że niepoprawne reguły mogą skutkować błędami 500 lub blokadą dostępu do potrzebnych zasobów. Dlatego najlepiej wprowadzać zmiany po kolei i testować działanie witryny.

Z czasem i praktyką zaczniesz swobodnie korzystać z .htaccess, zwiększając bezpieczeństwo, wydajność i SEO swojej strony. Powodzenia w konfiguracji!

Continue Reading

The latest handpicked blog articles

Switch sides. Join us.

Explore an entirely fresh approach to web development with pixfort kit.

Switch sides. Join us.

Explore an entirely fresh approach to web development with pixfort kit.

Switch sides. Join us.

Explore an entirely fresh approach to web development with pixfort kit.

Agencja marketingowa SEO4U

Newsletter

Tylko ciekawe info ze świata marketingu!

By signing up you agree to our privacy policy

seo4u © All rights reserved

Made with 🤍 on 🌎 Earth

Agencja marketingowa SEO4U

Newsletter

Tylko ciekawe info ze świata marketingu!

By signing up you agree to our privacy policy

seo4u © All rights reserved

Made with 🤍 on 🌎 Earth

Agencja marketingowa SEO4U

Newsletter

Tylko ciekawe info ze świata marketingu!

By signing up you agree to our privacy policy

seo4u © All rights reserved

Made with 🤍 on 🌎 Earth