Generator przekierowań .htaccess

Za każdym razem, gdy migrujesz bloga, zmieniasz schemat URL albo łączysz stare strony, .htaccess Apache bierze na siebie ciężar porządkowania. Ten generator zamienia proste mapowanie źródło → cel na poprawne dyrektywy RewriteRule z właściwymi flagami, gotowe do wrzucenia do pliku .htaccess witryny.

Jak wygenerować reguły przekierowania

  1. 1

    Wybierz typ przekierowania

    301 stałe dla przenosin bezpiecznych dla SEO, 302 tymczasowe dla testów A/B i przekierowań sezonowych.

  2. 2

    Wpisz źródło i cel

    Dokładne ścieżki albo wzorce regex: stara ścieżka staje się wzorcem RewriteRule, a nowy URL celem przekierowania.

  3. 3

    Sprawdź flagi

    Każda reguła automatycznie dostaje właściwą flagę, `[R=301,L]` albo `[R=302,L]`, więc blok od razu działa z mod_rewrite.

  4. 4

    Skopiuj dyrektywy

    Wygenerowany blok trafia do sekcji `<IfModule mod_rewrite.c>` pliku .htaccess.

Dyrektywy mod_rewrite kontra mod_alias

Apache oferuje dwa moduły do przekierowań. Wybierz na podstawie złożoności reguły.

Przewodnik decyzyjny

Wymaganie Użyj Przykład
Dokładny stary URL → dokładny nowy URL Redirect Redirect 301 /old /new
Prefiks wieloznaczny RedirectMatch RedirectMatch 301 ^/blog/(.*)$ /articles/$1
Dopasowanie ciągu zapytania RewriteRule Zobacz niżej
Wymuszenie HTTPS RewriteRule RewriteCond %{HTTPS} off + reguła
Warunkowe (przeglądarka, cookie) RewriteRule Z RewriteCond

Przykład: wymuś HTTPS z www

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Przykład: przenieś /blog/post-123 do /articles/post-123

RewriteEngine On
RewriteRule ^blog/(.*)$ /articles/$1 [L,R=301]

Flagi, które zobaczysz

  • L, ostatnia, nie kontynuuj przetwarzania kolejnych reguł.
  • R=301 lub R=302, przekierowanie z tym kodem statusu.
  • NC, bez rozróżniania wielkości liter.
  • QSA, dołącz oryginalny ciąg zapytania do nowego URL.
  • NE, nie koduj ponownie znaków specjalnych w celu.

Częste błędy

  • Zapomnienie o RewriteEngine On, bez tego żadna RewriteRule nie ma żadnego efektu.
  • Domyślne używanie 302, Google traktuje je jako tymczasowe, więc stary URL nadal się pozycjonuje.
  • Łańcuchowe przekierowania (stary → pośredni → końcowy), zawsze dąż do pojedynczego przeskoku; każdy dodatkowy przeskok traci moc linków i dodaje opóźnienie.

Najczęściej zadawane pytania

Użyj 301 dla przenosin trwałych: migracja witryny, zmiana sluga URL, wymuszenie HTTPS. Użyj 302 tylko w sytuacjach tymczasowych, jak kierowanie na stronę konserwacji albo podział A/B. Wyszukiwarki przenoszą sygnały rankingowe przy 301, a przy 302 niekoniecznie.

Najczęstszą przyczyną jest zapomnienie o wiodącym ukośniku we wzorcu. W RewriteRule wzorzec pasuje do ścieżki bez wiodącego ukośnika (np. ^blog/). W Redirect (mod_alias) wzorzec zaczyna się od ukośnika (/blog). Nie mieszaj tych dwóch konwencji.

Tak, użyj RewriteCond %{QUERY_STRING} ^id=123$ przed RewriteRule. Zwykłe Redirect nie czyta ciągu zapytania; tylko RewriteRule może na nim dopasowywać.

Tak, przy następnym żądaniu, Apache odczytuje .htaccess na każde żądanie. Nie trzeba restartować serwera. Jeśli nic się nie dzieje, sprawdź, czy w vhoście dla katalogu ustawiono AllowOverride All.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach