Generator przekierowań .htaccess
Przenoś adresy bez utraty SEO
-
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";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator przekierowań w .htaccess
Przekierowania przenoszą użytkowników i wyszukiwarki ze starych adresów na nowe. Dobrze ustawione chronią pozycję strony i unikają błędów 404.
301 czy 302?
| Kod | Znaczenie | Kiedy stosować |
|---|---|---|
| 301 | trwałe przeniesienie | zmiana adresu na stałe — przekazuje SEO |
| 302 | tymczasowe przeniesienie | testy, prace serwisowe |
Dopasowanie dokładne i prefiks
Reguła dokładna przenosi jeden adres. Wariant prefiksowy (RedirectMatch) obsługuje cały katalog — np. wszystkie podstrony /stary/ na /nowy/, zachowując resztę ścieżki.
Przykład
Redirect 301 /stara-strona https://example.com/nowa-strona
Dla katalogu: RedirectMatch 301 ^/blog/(.*)$ https://example.com/artykuly/$1.
Jak działa generator przekierowań .htaccess
Narzędzie zamienia trzy dane wejściowe — adres źródłowy, adres docelowy i kod odpowiedzi — na gotową regułę do pliku .htaccess. Serwer Apache czyta ten plik przy każdym żądaniu i porównuje ścieżkę z wzorcami od góry do dołu. Pierwsza pasująca reguła przejmuje żądanie, dlatego kolejność wpisów jest równie ważna jak ich treść.
Dla pojedynczego adresu powstaje dyrektywa z mod_alias, na przykład Redirect 301 /stara-strona https://example.com/nowa-strona. Dla całego katalogu potrzebny jest RedirectMatch z wyrażeniem regularnym i grupą przechwytującą, na przykład ^/blog/(.*)$ — nawias zbiera resztę ścieżki, a $1 wstawia ją do adresu docelowego. Bez grupy wszystkie podstrony trafiłyby na jeden wspólny adres, co dla wyszukiwarek jest błędem.
Gdy hosting nie ma mod_alias, generator przygotowuje wariant na mod_rewrite: RewriteEngine On oraz RewriteRule ^stara-strona/?$ https://example.com/nowa-strona [R=301,L]. Flaga R ustala kod odpowiedzi, a L kończy przetwarzanie dalszych reguł. Kod 301 oznacza przeniesienie trwałe, 302 tymczasowe — przeglądarka zapamiętuje 301 na długo, więc pomyłka w tym miejscu jest kosztowna i trudna do szybkiego cofnięcia.
Przykład krok po kroku: cztery adresy jedną regułą
- Stan wyjściowy: w katalogu /blog/ masz cztery adresy — /blog/, /blog/poradnik, /blog/cena i /blog/kontakt. Nowa struktura to /artykuly/ z identycznymi końcówkami.
- W narzędziu wpisujesz adres źródłowy /blog/, adres docelowy https://example.com/artykuly/ oraz kod 301.
- Generator rozpoznaje, że źródłem jest katalog, i tworzy regułę prefiksową: RedirectMatch 301 ^/blog/(.*)$ https://example.com/artykuly/$1
- Test pierwszego adresu: żądanie /blog/poradnik pasuje do wzorca, w grupie $1 ląduje tekst poradnik, wynik to https://example.com/artykuly/poradnik. Obsłużony 1 z 4 adresów.
- Test drugiego: /blog/cena daje https://example.com/artykuly/cena. Do sprawdzenia zostają 2 adresy — /blog/ i /blog/kontakt — oba pasują do tego samego wzorca.
- Bilans: 4 stare adresy obsłużone 1 regułą, czyli 0 dodatkowych wpisów i 1 kod odpowiedzi (301) dla całej grupy.
Tabela referencyjna: co wpisujesz i co dostajesz
| Przypadek | Dane wejściowe | Wygenerowana reguła |
|---|---|---|
| Pojedynczy adres, przeniesienie na stałe | źródło /stara-strona, cel https://example.com/nowa-strona, kod 301 | Redirect 301 /stara-strona https://example.com/nowa-strona |
| Pojedynczy adres, test lub prace serwisowe | źródło /stara-strona, cel https://example.com/nowa-strona, kod 302 | Redirect 302 /stara-strona https://example.com/nowa-strona |
| Cały katalog ze zachowaniem ścieżki | źródło /blog/, cel https://example.com/artykuly/, kod 301 | RedirectMatch 301 ^/blog/(.*)$ https://example.com/artykuly/$1 |
| Ten sam efekt bez mod_alias | źródło /blog/, cel https://example.com/artykuly/, kod 301 | RewriteRule ^blog/(.*)$ https://example.com/artykuly/$1 [R=301,L] |
| Tylko katalog główny, bez podstron | źródło /blog/, cel https://example.com/artykuly/, kod 301 | RedirectMatch 301 ^/blog/?$ https://example.com/artykuly/ |
| Przeniesienie całej domeny na inną | źródło /, cel https://nowa-domena.pl/, kod 301 | RedirectMatch 301 ^/(.*)$ https://nowa-domena.pl/$1 |
| Wymuszenie HTTPS na całej witrynie | źródło /, cel https://twoja-domena.pl/, kod 301 | RewriteCond %{HTTPS} off, następnie RewriteRule ^(.*)$ https://twoja-domena.pl/$1 [R=301,L] |
Jak używać generatora w praktyce
- Wklejaj reguły pojedynczo i testuj — najpierw dodaj jeden wpis, sprawdź w narzędziu deweloperskim przeglądarki kod odpowiedzi i adres docelowy, dopiero potem wstawiaj kolejne. Błąd w pierwszej regule potrafi zamaskować działanie wszystkich następnych.
- Pilnuj kolejności wpisów — reguły bardziej szczegółowe umieszczaj nad ogólnymi. Szeroki wzorzec katalogowy postawiony wyżej przechwyci żądania, które miały trafić do wyjątku opisanego niżej.
- Wdrażaj przez 302, kończ na 301 — ustaw czasowo kod 302, sprawdź na kilku adresach, że nic nie ginie, a potem zmień na 301. Trwałe przekierowanie zapisuje się w przeglądarkach i robotach, więc poprawianie go po fakcie bywa uciążliwe.
- Sprawdź, czy nie tworzysz pętli — adres źródłowy i docelowy nie mogą wskazywać na siebie ani dwóch adresów na siebie nawzajem. Pętla kończy się błędem w przeglądarce i zablokowaniem całej ścieżki.
- Opisz wpisy komentarzem — linia zaczynająca się od znaku # z datą i powodem przekierowania oszczędza czas przy kolejnej zmianie struktury adresów, zwłaszcza gdy plik prowadzi kilka osób.
Ograniczenia narzędzia
- Nie sprawdza, czy adres docelowy istnieje — generator zwraca tylko regułę i nie wysyła żadnego żądania. Jeśli po stronie celu nie ma strony, użytkownik zobaczy 404 mimo poprawnie działającego przekierowania.
- Nie zna konfiguracji serwera — o tym, czy działa mod_alias, czy mod_rewrite, decyduje hosting. Narzędzie podaje oba warianty, ale nie wykryje, który moduł jest włączony ani czy przekierowanie w ogóle zostanie wykonane.
- Nie wykrywa konfliktów z istniejącym .htaccess — jeśli w pliku są już reguły, dyrektywa RewriteBase albo inne przekierowania, wklejony blok może zmienić ich działanie lub zostać przez nie przechwycony.
- Nie obsługuje logiki warunkowej — przekierowania zależne od języka przeglądarki, geolokalizacji, metody POST czy konkretnych parametrów zapytania wymagają ręcznego dopisania warunków, których prosty generator nie tworzy.
Najczęstsze pytania
Dlaczego lepiej unikać łańcuchów przekierowań?
Każde ogniwo opóźnia stronę i rozprasza „moc” SEO. Przekierowuj od razu na docelowy adres.
Czy przekierowanie działa dla HTTPS?
Docelowy adres powinien być pełnym URL z https. Warto też wymusić HTTPS na całej witrynie osobną regułą.
Po co druga wersja z mod_rewrite?
Some serwery mają wyłączony mod_alias. Wersja RewriteRule działa dzięki mod_rewrite i bywa bardziej elastyczna.
Czy przekierowanie 301 można cofnąć?
Regułę w pliku .htaccess możesz zmienić od razu, ale skutki trwałego przekierowania zostają w przeglądarkach i robotach. Część użytkowników może trafiać na stary adres docelowy, dopóki nie wyczyści pamięci podręcznej, dlatego 301 warto wdrażać dopiero po testach.
Czy RedirectMatch zachowuje parametry z adresu?
Nie w sposób automatyczny. Grupa przechwytująca obejmuje tylko część ścieżki, a parametry po znaku zapytania trzeba dopisać ręcznie albo użyć wariantu na mod_rewrite z flagą QSA, która dołącza oryginalne parametry do adresu docelowego.
Jak przekierować wiele różnych adresów na jeden wspólny?
Dodaj osobną regułę dokładną dla każdego adresu źródłowego, wszystkie ze wskazaniem tego samego adresu docelowego. Wzorzec katalogowy nie zadziała, jeśli adresy źródłowe leżą w różnych, niepowiązanych ścieżkach.
Czy mogę przekierować subdomenę na inną domenę?
Tak, pod warunkiem że subdomena ma własny katalog z plikiem .htaccess i wpis w konfiguracji DNS. Reguła działa wtedy w obrębie tej subdomeny, a nie całego serwera, więc nie zastąpi zmian po stronie głównej domeny.
Czy reguła .htaccess zadziała na serwerze Nginx?
Nie. Plik .htaccess obsługuje Apache oraz serwery, które go emulują. Nginx ma własny format konfiguracji i wymaga zapisania przekierowania w bloku server lub location, więc wygenerowany kod trzeba przetłumaczyć ręcznie.