Generator .htaccess - Przekierowanie na HTTPS i 301

    Gotowy plik .htaccess dla Apache: przekierowanie na HTTPS i jedną wersję adresu z www lub bez, przekierowania 301, strona 404, blokada IP i plików .env oraz kompresja.

    Parametry

    Wprowadź dane do obliczeń

    Potrzebna przy wyborze wersji z www lub bez

    Jedna wersja adresu dla całej strony

    0 / 20000 znaków

    Stary i nowy adres w każdej linii, do 500

    Ścieżka na tym serwerze

    0 / 5000 znaków

    Każdy adres w osobnej linii, do 200

    Można zaznaczyć kilka

    Postęp wypełniania0 / 1 pól

    💡 Wypełnij wszystkie wymagane pola, aby odblokować przycisk obliczania

    Generator .htaccess: HTTPS, www i przekierowania 301 w jednym pliku

    Domena mojsklep.pl, wybór „HTTPS i bez www” i jedna linia „/stara-oferta /oferta” dają plik, w którym każdy z czterech wariantów starego adresu (http, https, z www i bez) trafia na https://mojsklep.pl/oferta w jednym przekierowaniu 301. Generator .htaccess składa reguły dla serwera Apache 2.4: wymuszenie HTTPS, jedną wersję adresu z www albo bez, listę przekierowań stałych (także z parametrami typu ?id=7), własną stronę błędu 404, blokadę adresów IP, blokadę plików .env i .git, kompresję i pamięć podręczną przeglądarki.

    Pod gotowym kodem jest tabela „Dokąd trafią adresy”: cztery warianty adresu i liczba przekierowań po drodze. Reguły z generatora sprawdziliśmy na prawdziwym Apache 2.4.48, wgrywając wygenerowane pliki i odpytując serwer, a ta tabela zgadzała się z jego odpowiedziami.

    Cztery liczby, które warto znać przed edycją .htaccess

    302
    domyślny kod flagi [R] w mod_rewrite, stałe przekierowanie wymaga R=301
    403
    odpowiedź dla zablokowanego IP i pliku .env
    1
    przekierowanie z http://www na docelowy adres
    500
    przekierowań w jednym pliku z generatora

    Od pustego formularza do pliku na serwerze

    1. Domena - np. mojsklep.pl. Możesz wkleić cały adres, generator sam zdejmie https:// i www. Domenę z polskimi znakami wpisz w zapisie punycode (xn--...).
    2. Adres docelowy strony - HTTPS bez www, HTTPS z www, samo HTTPS albo „bez zmian”, jeśli plik ma tylko przekierowywać pojedyncze adresy.
    3. Przekierowania 301 - w każdej linii stary i nowy adres oddzielone spacją, np. „/stara-oferta /oferta”. Nowy adres może być w innej domenie.
    4. Strona 404 - ścieżka do własnej strony błędu, np. /404.html.
    5. Blokada IP - adresy albo zakresy, każdy w osobnej linii.
    6. Dodatkowe opcje - brak listy plików, blokada plików ukrytych, kompresja, pamięć podręczna.
    7. Odczytaj wyniki - kliknij w kod (zaznaczy się cały), zapisz jako .htaccess i sprawdź w tabeli, dokąd trafią adresy.

    Jak czytać wygenerowane reguły

    Tak wygląda środek pliku dla mojsklep.pl z jednym przekierowaniem:

    RewriteRule "^stara-oferta/?$" "https://mojsklep.pl/oferta" [NC,R=301,L]
    
    RewriteCond %{HTTP_HOST} ^www\.mojsklep\.pl$ [NC]
    RewriteRule ^ https://mojsklep.pl%{REQUEST_URI} [R=301,L]
    
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://mojsklep.pl%{REQUEST_URI} [R=301,L]

    Kolejność ma znaczenie. Pojedyncze przekierowania stoją przed regułami hosta i HTTPS i od razu prowadzą na pełny docelowy adres, dlatego http://www.mojsklep.pl/stara-oferta nie skacze trzy razy (www, potem HTTPS, potem nowa ścieżka), tylko raz. Wzorzec zaczyna się bez ukośnika, bo w pliku .htaccess Apache porównuje adres już bez wiodącego „/”: reguła z „^/stara-oferta” nigdy by nie zadziałała. Końcowe „/?” sprawia, że /stara-oferta i /stara-oferta/ przekierowują tak samo, a flaga NC wyłącza rozróżnianie wielkości liter.

    Adresy z parametrami, np. /index.php?id=7, wymagają osobnego warunku RewriteCond %{QUERY_STRING}, bo sama RewriteRule parametrów nie widzi. Generator dopisuje wtedy flagę QSD, żeby stary parametr nie przeszedł na nowy adres (bez niej wyszłoby /kontakt?id=7).

    Ściąga: dyrektywy w pliku

    Dyrektywa Moduł Co robi w tym pliku
    RewriteRule ... [R=301,L]mod_rewriteprzekierowanie stałe i koniec przebiegu reguł
    RewriteCond %{HTTPS} !=onmod_rewritewarunek: połączenie bez szyfrowania
    RewriteRule ... - [F]mod_rewriteodpowiedź 403 dla plików zaczynających się od kropki
    Require not ipmod_authz_core / hostblokada adresu, zawsze razem z Require all granted w RequireAll
    ErrorDocument 404corewłasna treść strony błędu przy zachowanym kodzie 404
    Options -Indexescorewyłącza listę plików w katalogu bez index
    AddOutputFilterByType DEFLATEmod_deflate + mod_filterkompresja gzip HTML, CSS, JavaScript, JSON i SVG
    ExpiresByTypemod_expiresobrazy i fonty 1 rok (max-age=31536000), CSS i JS 1 miesiąc (max-age=2592000)

    Dokąd trafi adres przy każdym ustawieniu

    Wyniki z tabeli generatora dla domeny mojsklep.pl i ścieżki /kontakt, potwierdzone odpowiedziami serwera Apache. Liczba w nawiasie to liczba przekierowań.

    Wejście HTTPS bez www HTTPS z www Tylko HTTPS
    http://mojsklep.plhttps://mojsklep.pl (1)https://www.mojsklep.pl (1)https://mojsklep.pl (1)
    http://www.mojsklep.plhttps://mojsklep.pl (1)https://www.mojsklep.pl (1)https://www.mojsklep.pl (1)
    https://mojsklep.plbez zmian (0)https://www.mojsklep.pl (1)bez zmian (0)
    https://www.mojsklep.plhttps://mojsklep.pl (1)bez zmian (0)bez zmian (0)

    Ostatnia kolumna pokazuje, czemu samo HTTPS zwykle nie wystarcza: zostają dwie działające wersje strony, z www i bez.

    Fakty z dokumentacji Apache, które oszczędzają godzinę szukania błędu

    Domyślna wartość AllowOverride to None: bez zmiany w konfiguracji serwera plik .htaccess jest po prostu ignorowany.
    Dokumentacja Apache zaleca trzymać reguły w głównej konfiguracji, jeśli masz do niej dostęp: plik .htaccess jest wczytywany przy każdym żądaniu i serwer szuka go w każdym katalogu na ścieżce.
    Samo „Require not ip” nie działa. Zaprzeczenie nie może samo nikogo wpuścić, dlatego musi stać w bloku RequireAll obok „Require all granted”.
    ErrorDocument z pełnym adresem (http://...) sprawia, że Apache wysyła przekierowanie, a przeglądarka nie dostaje kodu 404. Dlatego generator przyjmuje tylko ścieżkę lokalną.
    mod_expires nie zmienia nagłówków, gdy odpowiedź ma już nagłówek Expires, np. z aplikacji albo serwera proxy.

    Kto po to sięga

    Właściciel strony po zakupie certyfikatu SSL - chce, żeby wszystkie adresy http przeszły na https bez ręcznego pisania reguł. Osoba przenosząca bloga albo sklep na nową strukturę adresów - wkleja listę starych i nowych adresów z arkusza i dostaje gotowe przekierowania 301. Administrator na hostingu współdzielonym - nie ma dostępu do konfiguracji serwera, więc .htaccess to jedyne miejsce na blokadę uciążliwego adresu IP albo ukrycie pliku .env. Twórca stron dla klientów - potrzebuje powtarzalnego, czytelnego pliku z komentarzami, który klient zrozumie.

    Pytania o plik .htaccess

    Jak zrobić przekierowanie na HTTPS w .htaccess?
    Dwie linie po RewriteEngine On: warunek RewriteCond %{HTTPS} !=on i reguła RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]. Generator wpisuje w nią Twoją domenę, jeśli wybierzesz też wersję z www albo bez, żeby całość odbyła się w 1 przekierowaniu.
    Po wgraniu pliku strona pokazuje błąd 500. Co zrobić?
    Błąd 500 po zmianie .htaccess oznacza zwykle dyrektywę, której serwer nie zna (brak modułu) albo na którą nie pozwala AllowOverride. Przywróć kopię, a potem dodawaj sekcje pojedynczo, żeby znaleźć tę, która przeszkadza.
    Przekierowanie się zapętla. Skąd to?
    Typowa przyczyna to CDN albo proxy przed serwerem, które łączy się z Apache przez http (dokumentacja Cloudflare opisuje to dla trybu Flexible: pętla powstaje, gdy serwer przekierowuje wszystkie żądania http na https). Serwer widzi wtedy %{HTTPS} = off przy każdym żądaniu i przekierowuje w kółko. Rozwiązanie: wymuś HTTPS w panelu CDN i usuń regułę HTTPS z pliku.
    Czy .htaccess działa na nginx?
    Ten plik jest dla serwera, który czyta .htaccess, czyli Apache i serwerów z nim zgodnych. Jeśli hosting działa na innym serwerze, reguły trzeba przenieść do jego konfiguracji.
    Jak zablokować cały zakres adresów IP?
    Wpisz zakres w zapisie CIDR (203.0.113.0/24), z maską (203.0.113.0/255.255.255.0) albo samą początkową część (203.0.113). Wszystkie trzy formy działają w Require not ip, także dla IPv6 (2001:db8::/32).
    Czy blokada plików ukrytych nie zepsuje certyfikatu SSL?
    Nie. Reguła pomija katalog .well-known, z którego korzystają urzędy certyfikacji przy odnawianiu certyfikatu. Zablokowane są .env, .git, .htpasswd i inne nazwy zaczynające się od kropki.

    Powiązane narzędzia

    Kalkulator Analizy ABC

    Klasyfikacja ABC listy produktów wklejonej z arkusza, z udziałem skumulowanym i progami do ustawienia - Zobacz kalkulator

    Kalkulator Chmod

    Uprawnienia 755 albo 644 jako zapis rwx i z powrotem, z bitami specjalnymi i umask - Zobacz generator

    Regex Tester

    Sprawdź wyrażenie regularne, zanim wpiszesz je do własnej RewriteRule - Zobacz generator

    Generator Cron

    Harmonogram zadań na serwerze, np. kopia zapasowa co noc - Zobacz generator

    Kodowanie Base64

    Nagłówek Basic Auth i dane w Base64 - Zobacz generator

    Generator MD5

    Skrót MD5 tekstu w zapisie hex i Base64 - Zobacz generator

    Formatowanie JSON

    Walidacja i czytelny zapis plików konfiguracyjnych JSON - Zobacz generator

    Generator zweryfikowany przez zespół LiczGrupa.pl

    Treść, wzory i wyniki zostały sprawdzone pod kątem poprawności i aktualności przez nasz zespół specjalistów.

    Krystian Szyszka

    Sprawdził: Krystian Szyszka