• Strony WWW
  • Plik .htaccess w Apache - reguły, przekierowania i błędy

Plik .htaccess w Apache - reguły, przekierowania i błędy

Tymon Krajewski • 9 października 2026
Edytor WP Htaccess w panelu WordPress, wyświetlający kod konfiguracyjny pliku .htaccess.

Spis treści

Awaria przekierowania, błąd 500 albo niechciane wyświetlanie listy plików często prowadzą do jednego miejsca: konfiguracji serwera. W tym poradniku pokazuję, czym jest plik .htaccess, gdzie go umieścić, jak tworzyć bezpieczne reguły Apache oraz jak rozwiązywać najczęstsze problemy bez przypadkowego wyłączania strony.

Najważniejsze informacje o konfiguracji .htaccess

  • Plik .htaccess działa na serwerach Apache i pozwala zmieniać ustawienia wybranego katalogu.
  • Przekierowanie HTTPS, własna strona 404 i przyjazne adresy URL to jego najpopularniejsze zastosowania.
  • Błąd 500 zwykle oznacza niepoprawną dyrektywę, brak modułu albo ograniczenia hostingu.
  • Kopia zapasowa przed każdą zmianą chroni przed utratą dostępu do witryny.
  • Nginx nie obsługuje tego mechanizmu bezpośrednio, dlatego reguły trzeba przepisać do konfiguracji serwera.

Fragment kodu plik htaccess z dyrektywami mod_rewrite, wskazujący na problem z działaniem.

Czym jest plik .htaccess i do czego służy

Plik `.htaccess` to lokalny plik konfiguracyjny serwera Apache. Pozwala ustawić reguły dla konkretnego katalogu oraz jego podkatalogów, bez edytowania głównej konfiguracji całego serwera. Dla właściciela małej strony oznacza to możliwość wprowadzenia zmian z poziomu menedżera plików lub FTP.

Najczęściej wykorzystuję go do przekierowań, obsługi przyjaznych adresów, ochrony wybranych katalogów i definiowania własnych stron błędów. Trzeba jednak pamiętać, że nie jest to uniwersalny panel sterowania hostingiem. Zakres dostępnych dyrektyw zależy od konfiguracji Apache i ustawień administratora serwera.

Gdzie znajduje się ten plik

Nazwa zaczyna się od kropki, więc systemy uniksowe traktują go jako plik ukryty. W katalogu głównym strony, obok plików takich jak `index.php` lub `index.html`, powinien znajdować się plik o dokładnej nazwie `.htaccess`, bez dodatkowego rozszerzenia.

Jeżeli go nie widać, włącz pokazywanie ukrytych plików w kliencie FTP albo menedżerze hostingu. Niektórzy dostawcy nie tworzą go automatycznie, dlatego można przygotować pusty plik tekstowy i zmienić jego nazwę. Rozszerzenie `.txt` nie może pozostać na końcu.

Apache a Nginx

To rozwiązanie dotyczy przede wszystkim serwera Apache. Nginx nie odczytuje `.htaccess`, więc reguły zapisane w tym pliku pozostaną tam bez wpływu na działanie witryny. Na serwerze Nginx podobne ustawienia wprowadza się w głównym pliku konfiguracji, zwykle z pomocą administratora lub firmy hostingowej.

Jak utworzyć i bezpiecznie edytować konfigurację

Najprostsza metoda polega na utworzeniu pliku w katalogu głównym strony i zapisaniu go jako zwykłego tekstu w kodowaniu UTF-8. Do edycji wystarczy edytor kodu, na przykład Visual Studio Code. Nie polecam Worda ani podobnych programów, ponieważ mogą dodać niewidoczne formatowanie i zamienić zwykłe cudzysłowy na typograficzne.

Przed zmianą pobieram istniejący plik na komputer i zapisuję jego kopię pod inną nazwą. To drobna czynność, ale przy błędzie 500 pozwala szybko przywrócić poprzednią wersję. Uprawnienia pliku zwykle ustawia się na 644, choć konkretną wartość może narzucać hosting.

Sprawdź, czy hosting pozwala na .htaccess

Apache musi mieć włączoną obsługę plików konfiguracyjnych dla danego katalogu. Administrator kontroluje to między innymi za pomocą ustawienia `AllowOverride`. Gdy ma ono wartość `None`, nawet poprawne reguły nie zadziałają.

Przydatnym testem jest utworzenie tymczasowej, nieszkodliwej reguły, na przykład własnej strony błędu, albo sprawdzenie logów serwera. Jeżeli po dodaniu najprostszej dyrektywy witryna zwraca błąd 500, problem może leżeć w ograniczeniach hostingu, a nie w samej składni.

Podstawowa budowa reguły

W przypadku adresów URL najczęściej korzysta się z modułu `mod_rewrite`. Moduł ten analizuje żądany adres i może skierować go do innego adresu, pliku lub aplikacji, choć użytkownik nadal może widzieć przyjazną ścieżkę w przeglądarce.

RewriteEngine On
RewriteRule ^stara-strona/?$ /nowa-strona [R=301,L]

Pierwsza linia włącza mechanizm przepisywania adresów. Druga oznacza przekierowanie stałe z `/stara-strona` na `/nowa-strona`, a flagi 301 i L informują odpowiednio o typie przekierowania oraz zakończeniu dalszego przetwarzania reguł.

Najpraktyczniejsze reguły dla strony WWW

Wymuszenie połączenia HTTPS

Jeżeli certyfikat SSL działa poprawnie, warto przekierować ruch z HTTP do HTTPS. Bez tego część odwiedzających może trafić na niezabezpieczony wariant strony, a wyszukiwarka może zobaczyć dwa adresy prowadzące do tej samej treści.

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Przekierowanie stałe zapisuje nowy adres w pamięci przeglądarek i może być przechowywane przez wyszukiwarki. Dlatego przed użyciem kodu sprawdzam certyfikat, działanie wersji HTTPS oraz zasoby ładowane przez stronę. Samo przekierowanie nie naprawi problemu mixed content, czyli sytuacji, w której bezpieczna strona ładuje obrazy lub skrypty przez HTTP.

Wersja z www albo bez www

Strona powinna mieć jeden główny wariant domeny. Można wybrać adres z `www` albo bez niego, ale oba warianty nie powinny działać niezależnie, ponieważ utrudnia to zarządzanie adresami i może prowadzić do duplikacji treści.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.przyklad\.pl$ [NC]
RewriteRule ^ https://przyklad.pl%{REQUEST_URI} [R=301,L]

W przykładzie cały ruch z wersji `www` trafia na domenę bez tego prefiksu. Trzeba zastąpić domenę własnym adresem i upewnić się, że rekordy DNS oraz certyfikat obejmują oba warianty.

Przyjazne adresy dla aplikacji PHP

Systemy CMS i własne aplikacje często korzystają z jednego pliku wejściowego, takiego jak `index.php`. Reguła może przekazać do niego żądanie, które nie wskazuje na istniejący plik ani katalog.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Warunki `!-f` i `!-d` chronią istniejące pliki oraz katalogi przed przechwyceniem. To ważne, bo bez nich obrazy, arkusze CSS i skrypty mogłyby zostać niepotrzebnie skierowane do aplikacji. W praktyce dokładna reguła zależy od używanego CMS-a, dlatego nie warto bezmyślnie kopiować całego pliku z innej instalacji.

Własne strony błędów

Surowy komunikat serwera nie pomaga użytkownikowi znaleźć właściwej treści. Można wskazać własne strony dla błędów, na przykład 404 oznaczającego brak zasobu oraz 500 sygnalizującego problem po stronie serwera.

ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

Strona 404 powinna zawierać link do strony głównej, wyszukiwarkę lub najważniejsze kategorie. Nie kierowałbym każdego błędnego adresu automatycznie na stronę główną, ponieważ użytkownik traci wtedy informację, że żądany zasób nie istnieje.

Wyłączenie listowania katalogów

Jeżeli katalog nie zawiera pliku indeksowego, serwer może pokazać listę jego zawartości. To nie zawsze jest luka, ale często niepotrzebnie ujawnia nazwy kopii zapasowych, bibliotek albo plików technicznych.

Options -Indexes

Ta prosta dyrektywa blokuje automatyczne wyświetlanie listy plików. Nie zastępuje jednak prawidłowych uprawnień ani ochrony danych. Pliki z hasłami, kluczami API i kopiami baz danych najlepiej trzymać poza publicznym katalogiem strony.

Przekierowania i przepisywanie adresów bez błędów

Najwięcej problemów powoduje mieszanie przekierowania z przepisywaniem adresu. Flaga `R=301` wysyła przeglądarkę pod nowy adres, natomiast reguła bez `R` może zmienić sposób obsługi żądania po stronie serwera, pozostawiając adres w pasku bez zmian.

Element Znaczenie Kiedy używać
R=301 Stałe przekierowanie widoczne dla przeglądarki Zmiana adresu strony lub domeny
R=302 Tymczasowe przekierowanie Krótki test albo czasowa przerwa
L Kończy działanie reguł w bieżącym przebiegu Gdy kolejna reguła nie powinna już działać
NC Ignoruje wielkość liter przy dopasowaniu Gdy adresy mają działać niezależnie od zapisu liter

Przed użyciem kodu sprawdzam, czy docelowy adres nie przekierowuje z powrotem do źródłowego. Taka pętla może objawić się komunikatem o zbyt wielu przekierowaniach. Pomaga też testowanie w trybie prywatnym, ponieważ przeglądarka może długo pamiętać przekierowanie 301.

Reguły muszą uwzględniać położenie pliku

To, co działa w głównym katalogu domeny, nie zawsze zadziała w podkatalogu. Apache usuwa część ścieżki odpowiadającą lokalizacji `.htaccess`, dlatego wzorzec w pliku umieszczonym w `/blog` będzie interpretowany inaczej niż ten sam wzorzec w katalogu głównym.

Typowy błąd polega na wpisaniu pełnej ścieżki domeny w `RewriteRule`, choć w tym miejscu powinien znaleźć się tylko fragment adresu. Gdy reguły stają się rozbudowane, zapisuję kilka wariantów testowych i sprawdzam je po jednym, zamiast wdrażać cały zestaw naraz.

Bezpieczeństwo i typowe błędy

Najpoważniejszy błąd to edycja bez kopii zapasowej. Jedna literówka w dyrektywie może zablokować całą witrynę, a przy złej regule dostępu można również przypadkowo odciąć panel administracyjny.

Ochrona wrażliwych plików

Wybrane pliki można zablokować przed bezpośrednim pobraniem. Przykład chroni plik zawierający konfigurację aplikacji:


    Require all denied

Składnia `Require all denied` jest właściwa dla nowszych wersji Apache 2.4. Starsze konfiguracje mogą korzystać z dyrektyw `Order` i `Deny`, ale mieszanie obu sposobów bez znajomości wersji serwera często kończy się błędem. Najpewniejszą ochroną pozostaje przechowywanie sekretów poza katalogiem publicznym.

Przeczytaj również: Sprawdzanie linków - Klucz do lepszego SEO i bezpieczeństwa online

Co oznacza błąd 500

Błąd 500 po zmianie konfiguracji najczęściej wynika z błędnej składni, niedozwolonej dyrektywy albo braku wymaganego modułu. W pierwszej kolejności przywracam poprzednią wersję pliku, a potem dodaję reguły pojedynczo.

  • Sprawdź, czy nazwa pliku to dokładnie `.htaccess`.
  • Usuń ostatnio dodaną regułę i odśwież stronę.
  • Przejrzyj logi błędów w panelu hostingu.
  • Sprawdź, czy hosting pozwala na użyte dyrektywy.
  • Nie kopiuj składni przeznaczonej dla Nginx lub innej wersji Apache.

Nie zalecam wyłączania zabezpieczeń serwera tylko po to, żeby jedna reguła zaczęła działać. Jeśli logi nie są dostępne, zgłoszenie do hostingu z dokładnym fragmentem konfiguracji zwykle rozwiązuje sprawę szybciej niż przypadkowe zmiany.

Kiedy lepiej użyć konfiguracji serwera

.htaccess jest wygodny na hostingu współdzielonym, ale ma swoją cenę. Apache może sprawdzać obecność takich plików w kolejnych katalogach przy obsłudze żądania, dlatego przy dużym ruchu konfiguracja centralna bywa wydajniejsza i łatwiejsza do kontroli.

Rozwiązanie Najlepsze zastosowanie Ograniczenie
`.htaccess` Hosting współdzielony i szybkie zmiany lokalne Zależność od AllowOverride i możliwy narzut wydajności
Konfiguracja Apache Serwer VPS, dedykowany lub środowisko firmowe Wymaga dostępu administracyjnego
Konfiguracja Nginx Serwery działające na Nginx Reguły trzeba zapisać w innym formacie

Na małym blogu różnica może być niezauważalna, ale przy rozbudowanej aplikacji i dużej liczbie reguł przeniesienie ustawień do głównej konfiguracji ma sens. To decyzja dla administratora serwera, nie dla samego pliku. Właściciel strony powinien przede wszystkim wiedzieć, gdzie kończą się możliwości edycji z poziomu FTP.

Jak pracować z tym plikiem bez ryzyka

Moja praktyczna procedura jest prosta. Najpierw pobieram kopię, zapisuję cel zmiany jednym zdaniem, dodaję jedną regułę i sprawdzam stronę w kilku wariantach. Testuję nie tylko stronę główną, ale również adres docelowy, wersję HTTP, wersję HTTPS oraz przykładowy brakujący adres.

Po wdrożeniu sprawdzam logi i obserwuję, czy nie pojawiły się błędy zasobów, pętle przekierowań albo niedostępne podstrony. Najbezpieczniejsza konfiguracja jest możliwie krótka, opisana komentarzami i pozbawiona reguł skopiowanych bez zrozumienia ich działania.

Jeżeli strona korzysta z systemu CMS, aktualizacje mogą nadpisać część ustawień albo dopisać własne reguły. Dlatego przechowuję konfigurację także w kopii projektu i po każdej większej aktualizacji sprawdzam przekierowania, logowanie użytkowników oraz pliki statyczne.

Dobrze przygotowany `.htaccess` nie jest magicznym sposobem na przyspieszenie witryny ani zastępstwem dla zabezpieczeń aplikacji. To precyzyjne narzędzie do obsługi ruchu na serwerze Apache. Używany ostrożnie upraszcza adresy, porządkuje przekierowania i ogranicza dostęp do wybranych zasobów, a używany bez testów może zatrzymać całą stronę.

FAQ - Najczęstsze pytania

Plik umieść w głównym katalogu strony, obok pliku index.php lub index.html. Ma mieć dokładną nazwę .htaccess, bez rozszerzenia .txt, i powinien być zapisany jako zwykły tekst w kodowaniu UTF-8.

Najpierw przywróć kopię poprzedniej wersji pliku, a następnie dodawaj reguły pojedynczo. Sprawdź składnię, logi błędów, dostępność wymaganych modułów oraz to, czy hosting zezwala na użyte dyrektywy przez ustawienie AllowOverride.

Możesz użyć RewriteCond %{HTTPS} !=on oraz reguły kierującej na https://%{HTTP_HOST}%{REQUEST_URI} z flagami R=301,L. Przed wdrożeniem sprawdź certyfikat, działanie wersji HTTPS i zasoby ładowane przez stronę, aby uniknąć problemu mixed content.

Przekierowanie z flagą R=301 wysyła przeglądarkę pod nowy adres, który zmienia się w pasku adresu. Przepisywanie bez flagi R zmienia obsługę żądania po stronie serwera, pozostawiając przyjazny adres widoczny dla użytkownika.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi

apache
przekierowania
nginx
.htaccess
mod_rewrite
Autor Tymon Krajewski
Tymon Krajewski
Nazywam się Tymon Krajewski i od trzech lat zajmuję się nowoczesnymi technologiami, programowaniem oraz sztuczną inteligencją. Moje zainteresowanie tymi tematami zaczęło się od fascynacji możliwościami, jakie dają nowe rozwiązania technologiczne. Lubię dzielić się wiedzą i pomagać innym zrozumieć złożone zagadnienia, które mogą wydawać się przytłaczające. W mojej pracy koncentruję się na aktualnych trendach oraz praktycznych zastosowaniach technologii, co pozwala mi dostarczać czytelnikom użyteczne i zrozumiałe informacje. Staram się weryfikować źródła, porównywać różne podejścia i upraszczać trudne tematy, aby każdy mógł czerpać z nich korzyści. Moim celem jest, aby każdy artykuł był nie tylko dokładny, ale także przystępny dla szerokiego grona odbiorców.

Udostępnij artykuł

Napisz komentarz