Generator pliku .htaccess
Generuj reguły .htaccess dla Apache: przekierowania 301/302, URL rewriting, ochrona hasłem, HTTPS redirect, custom error pages. Bezpłatnie.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
# ---------------------------------------------------------------------- # Wygenerowano w generatorze .htaccess (webp.pl) # Wskazówka: przed podmianą zrób kopię zapasową dotychczasowego .htaccess. # ----------------------------------------------------------------------
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator .htaccess – Apache mod_rewrite i przekierowania
Plik .htaccess (Hypertext Access) to konfiguracja Apache na poziomie katalogu – bez dostępu do głównego httpd.conf. Generator tworzy gotowe reguły dla najczęstszych zastosowań: przekierowania, URL rewriting, ochrona dostępu i nagłówki bezpieczeństwa.
Podstawy pliku .htaccess
Lokalizacja: w katalogu webroot (public_html) lub podkatalogach. Zakres: działa dla danego katalogu i podkatalogów. AllowOverride: musi być włączone w httpd.conf (AllowOverride All). Wykonanie: Apache parsuje przy każdym żądaniu (uwaga: wydajność!). Format: dyrektywy Apache, komentarze z #. Najczęstsze moduły: mod_rewrite, mod_auth, mod_headers.
Przekierowania 301 i 302
301 Permanent: SEO-friendly, zmień URL na stałe. Redirect 301 /old-page.html /new-page. RewriteRule ^old-page$ /new-page [R=301,L]. 302 Temporary: bez wpływu na SEO, tymczasowe. Redirect 302 /promo /landing. HTTPS redirect: RewriteCond %{HTTPS} off → RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]. www → non-www: RewriteCond %{HTTP_HOST} ^www\.
URL Rewriting – przyjazne adresy
mod_rewrite: zamienia czytelne URL na query string. RewriteEngine On (wymagane). RewriteRule ^artykul/([0-9]+)$ index.php?id=$1 [L]. CMS: WordPress używa RewriteRule ^index\.php$ - [L] + RewriteRule . /index.php [L]. Laravel/Symfony: RewriteRule ^ index.php [L]. Flagi: [L]=last, [R]=redirect, [QSA]=query string append, [NC]=case insensitive.
Bezpieczeństwo przez .htaccess
Ochrona hasłem (Basic Auth): AuthType Basic + AuthName + AuthUserFile /path/.htpasswd + Require valid-user. Blokowanie IP: Deny from 192.168.1.1. Ochrona pliku:
Jak generator zamienia wybory z formularza na reguły Apache
Generator nie zgaduje konfiguracji – działa jak translator. Każde pole formularza ma przypisany szablon dyrektywy, a wartości, które wpisujesz, trafiają do ściśle określonych miejsc tego szablonu. Wybranie przekierowania trwałego wstawia kod odpowiedzi 301, wybranie przepisywania adresu – parę RewriteCond i RewriteRule. Zaznaczenie kilku opcji powoduje sklejenie kilku bloków w jeden plik, w kolejności zależnej od typu zadania: najpierw włączenie modułu przepisywania, potem warunki i reguły, na końcu dyrektywy nagłówków oraz kontroli dostępu.
Kolejność bloków ma znaczenie, bo Apache czyta plik od góry do dołu i przy dyrektywach mod_rewrite zatrzymuje się na pierwszym trafieniu, jeśli reguła ma flagę [L]. Dlatego przekierowania pojedynczych adresów warto umieszczać przed ogólnymi regułami kierującymi wszystko do index.php – inaczej adres objęty przekierowaniem mógłby zostać przechwycony przez regułę zapasową i nigdy nie dotrzeć do swojego celu.
Warunek RewriteCond odnosi się zawsze do reguły zapisanej bezpośrednio pod nim, a zmienne w nawiasach procentowych, takie jak %{HTTPS}, %{HTTP_HOST} czy %{REQUEST_URI}, są podstawiane przez Apache w momencie obsługi żądania. Wzorce w RewriteRule to wyrażenia regularne – kropka oznacza dowolny znak, więc kropkę w nazwie pliku trzeba poprzedzić ukośnikiem, a grupy w nawiasach okrągłych stają się numerowanymi odwołaniami $1, $2 w adresie docelowym.
Przykład krok po kroku: trwałe przekierowanie adresu z zachowaniem parametrów
- W formularzu wybierasz zadanie „przekierowanie trwałe (301)” i podajesz ścieżkę źródłową, na przykład /stara-oferta.html.
- Jako adres docelowy wpisujesz /oferta/ – generator traktuje go jako adres na tym samym hoście, bez zmiany domeny.
- Zaznaczasz opcję zachowania parametrów zapytania; wtedy do reguły dochodzi flaga [QSA], a wynik wygląda tak: RewriteRule ^stara-oferta\.html$ /oferta/ [R=301,QSA,L].
- Przed regułą generator dopisuje RewriteEngine On, jeśli w pliku jeszcze go nie ma – bez tej linii Apache zignoruje cały blok.
- Cały wynik wklejasz do pliku .htaccess w katalogu public_html, czyli w webroot, i zapisujesz zmiany.
- Test: wchodzisz na /stara-oferta.html?utm_source=mail i sprawdzasz w narzędziach deweloperskich, czy odpowiedź ma kod 301, a przeglądarka kończy na /oferta/?utm_source=mail.
Od wyboru w formularzu do gotowej dyrektywy
| Opcja w generatorze | Wstawiana dyrektywa | Uwagi |
|---|---|---|
| Przekierowanie pojedynczego adresu (301) | Redirect 301 /stara-strona.html /nowa-strona.html | Działa bez mod_rewrite, dopasowanie jest dokładne |
| Przekierowanie całego katalogu | Redirect 301 /stary-katalog /nowy-katalog | Obejmuje także podścieżki starego katalogu |
| Przepisanie adresu na parametr | RewriteRule ^artykul/([0-9]+)$ index.php?id=$1 [L] | Wymaga włączonego RewriteEngine On |
| Wymuszenie HTTPS | RewriteCond %{HTTPS} off przed regułą przekierowującą | Warunek sprawdza protokół bieżącego żądania |
| Zamiana www na non-www | RewriteCond %{HTTP_HOST} ^www\. | Test hosta musi stać przed regułą docelową |
| Ochrona hasłem (Basic Auth) | AuthType Basic, AuthName, AuthUserFile, Require valid-user | Wymaga osobnego pliku .htpasswd |
| Blokada adresu IP | Deny from 192.168.1.1 lub Require all denied | Składnia zależy od wersji Apache |
| Nagłówek bezpieczeństwa | Header set X-Content-Type-Options nosniff | Korzysta z modułu mod_headers |
Praktyczne wskazówki przy wdrażaniu wygenerowanego pliku
- Zachowaj kopię obecnego pliku – przed podmianą .htaccess zapisz jego dotychczasową treść. Błędna dyrektywa potrafi wywołać błąd 500 na całej witrynie, a wtedy wystarczy przywrócić poprzednią wersję.
- Testuj adresy jeden po drugim – po każdej zmianie sprawdź kod odpowiedzi dla adresu źródłowego i docelowego. Dzięki temu od razu wiadomo, która reguła działa, a która wymaga poprawy.
- Nie mieszaj dwóch mechanizmów w jednej sprawie – jeśli przekierowanie obsługuje już Redirect z mod_alias, dodanie równoległej reguły RewriteRule dla tego samego adresu zwykle kończy się konfliktem kolejności.
- Sprawdź, czy hosting pozwala na .htaccess – gdy serwer ma wyłączone AllowOverride, wygenerowany kod trzeba przenieść do konfiguracji hosta albo zmienić plan na taki, który obsługuje pliki katalogowe.
- Komentuj bloki – wiersze zaczynające się od # nie są wykonywane, a pozwalają po miesiącach rozpoznać, po co powstała dana reguła. Generator opisuje w ten sposób każdą sekcję.
Czego generator nie sprawdzi
- Stanu konfiguracji serwera – narzędzie nie wie, czy mod_rewrite, mod_headers i mod_auth są włączone ani czy AllowOverride dopuszcza użycie pliku. Wygenerowany kod może być poprawny składniowo i mimo to nie działać.
- Konfliktów z istniejącymi regułami – generator nie analizuje aktualnej treści .htaccess. Jeśli w pliku są już wpisy dotyczące tych samych adresów, o wyniku zdecyduje kolejność, a nie sam nowy blok.
- Wersji Apache – składnia kontroli dostępu różni się między Apache 2.2 a 2.4 (Deny from kontra Require). Reguły są zapisywane w jednej konwencji, więc na starszym serwerze trzeba je dostosować ręcznie.
- Adresów docelowych – generator nie sprawdza, czy strona wskazana w przekierowaniu istnieje i czy odpowiada kodem 200. Literówka w adresie da regułę poprawną formalnie, ale prowadzącą do błędu 404.
Najczęstsze pytania
Jak wykonać przekierowanie HTTPS przez .htaccess?
RewriteEngine On. RewriteCond %{HTTPS} off. RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]. Dla serwerów za proxy/load balancer: RewriteCond %{HTTP:X-Forwarded-Proto} !https. Sprawdź w przeglądarce przez DevTools (Network): kod 301 i nagłówek Location. Po wdrożeniu HTTPS: wyczyść cache przeglądarki (Ctrl+Shift+Del).
Jak chronić katalog hasłem?
htpasswd -c /home/user/.htpasswd username (utwórz plik). htpasswd /home/user/.htpasswd username2 (dodaj). .htaccess: AuthType Basic, AuthName "Restricted Area", AuthUserFile /bezwzgledna/sciezka/.htpasswd, Require valid-user. UWAGA: .htpasswd poza webroot (żeby nie był dostępny publicznie). HTTPS + Basic Auth: szyfruje credentials.
Jak naprawić błąd 500 po edycji .htaccess?
Błąd składni w .htaccess = HTTP 500. Sprawdź: error_log Apache (często /var/log/apache2/error.log). Tymczasowo: zmień nazwę na .htaccess.bak → sprawdź czy 500 znika. Debuguj linię po linii: zakomentuj # nową regułę. Walidator online: htaccess.madewithlove.com. Częste błędy: brak RewriteEngine On, zły path do AuthUserFile.
Jaka jest różnica między .htaccess a nginx.conf?
Apache: .htaccess (per-directory), httpd.conf (globalny). Nginx: brak .htaccess, wszystko w nginx.conf/vhost. Wydajność: .htaccess wolniejszy (parsowanie każdego żądania). Nginx: szybszy bo konfiguracja załadowana raz. Migracja Apache→Nginx: trzeba przepisać reguły. Nginx rewrite: location ~ ^/old/(.*)$ { return 301 /new/$1; }.
Jak ustawić custom error pages?
ErrorDocument 404 /404.html. ErrorDocument 500 /500.html. ErrorDocument 403 /forbidden.html. Pełna ścieżka: ErrorDocument 404 /errors/not-found.html. Dynamic 404 (PHP): ErrorDocument 404 /404.php. Sprawdź: wejdź na nieistniejący URL. Ważne: błąd 404 powinien zwracać status 404 (nie 200 – soft 404 jest zły dla SEO).
Czym różni się Redirect 301 od RewriteRule [R=301,L]?
Redirect to prosta dyrektywa z mod_alias, która działa na dokładnie podanej ścieżce i nie wymaga mod_rewrite. RewriteRule dopasowuje wzorzec wyrażeniem regularnym, więc jedną regułą można obsłużyć wiele adresów.
Czy plik .htaccess działa na Nginx?
Nie. Nginx nie czyta plików .htaccess – przekierowania i przepisywanie adresów konfiguruje się w dyrektywach server i location.
Dlaczego moje reguły .htaccess nie działają?
Najczęstsze przyczyny to brak wiersza RewriteEngine On, wyłączone AllowOverride w konfiguracji serwera albo brak wymaganego modułu. Warto też sprawdzić, czy reguła nie stoi pod zbyt ogólnym wpisem kończącym przetwarzanie flagą [L].
Gdzie wkleić wygenerowany kod?
Do pliku .htaccess w katalogu głównym witryny, czyli w webroot. Jeśli reguła ma dotyczyć tylko jednej sekcji, można zapisać osobny .htaccess w podkatalogu – działa wtedy na ten katalog i jego podkatalogi.
Jak sprawdzić, czy przekierowanie 301 działa poprawnie?
Wejdź na adres źródłowy i obejrzyj kod odpowiedzi w narzędziach deweloperskich albo pobierz nagłówki narzędziem curl. Kod 301 wraz z nagłówkiem Location wskazującym adres docelowy oznacza, że reguła zadziałała.
Powiązane narzedzia: tester .htaccess, generator nginx config i analizator nagłówków HTTP.