301 редирект через .htaccess (примеры)

301 редирект с одной страницы на другую

1. Самый простой вариант Redirect 301 /test-1/ http://site.com/test-2/

Более подробный

RewriteCond %{REQUEST_URI} ^/test/$ RewriteRule ^.*$ http://site.com/new-test/? [R=301,L]

2. Переадресация всех страниц старого сайта на главную нового сайта RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ https://webmister.pro/ [L,R=301]

3. 301 редирект с www на без www (главное зеркало – домен без www) RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

В начале файла .htaccess нужно добавить: RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

4. 301 редирект с без www на www (главное зеркало – домен с www) RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

5. 301 редирект со страниц со слешем на без слеша (весь сайт) RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ /$1 [R=301,L]

6. 301 редирект со страниц без слеша на слеш (часто в CMS системах устанавливается автоматически) RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

7. Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]

8. Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

9. Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы RewriteCond %{REQUEST_URI} ^\/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]

10. Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы RewriteCond %{REQUEST_URI} ^\/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]

11. 301 редирект только адреса site.com/index.php (без GET параметров) на основное зеркало site.com RewriteCond %{REQUEST_URI} /index.php RewriteCond %{QUERY_STRING} ^\z RewriteRule ^(.*)$ http://site.com/? [R=301,L]

12. 301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php)

Пример: перенаправление site.com/index.php?n=1 на site.com/?n=1 RewriteCond %{REQUEST_URI} /index.php RewriteRule ^(.*)$ http://site.com/ [R=301,L]

12. 301 редирект url с GET параметрами (динамический URL) на статический
Вариант №1 (простой адрес с GET параметром): RewriteCond %{QUERY_STRING} ^id=229 RewriteRule ^.*$ /supermodel/? [R=301,L]

Вариант №2 (со страницы и GET параметром) RewriteCond %{REQUEST_URI} /test/ RewriteCond %{QUERY_STRING} ^id=229 RewriteRule ^.*$ /supermodel/? [R=301,L]

13. Все страницы одного домена на главную страницу другого домена RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ http://site.com/ [L,R=301]

14. Каждая страница одного домена на такой же адрес другого url RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ http://site.com/$1 [L,R=301]

Редирект с http на https

1. Редирект проверенный мной на многих сайтах для Wordpress RewriteCond %{SERVER_PORT} ^80$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Памятка по используемым символам и обозначениям

Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.

Спецсимволы, используемые в правилах и их значения.

  • ^ — спецсимвол начала строки;
  • $ — спецсимвол конца строки;
  • ! — спецсимвол отрицания;
  • . — точка, заменяет любой символ, но только один;
  • () — группировка;
  • \ — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом;
  • # — начало текстового комментария в файле.

Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.

  • ? — символ повторяется 0 или 1 раз.
  • + — повторяется от 1 до 65536 раз.
  • * — повторяется от 0 до 65536 раз.

Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].

  • NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
  • R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
  • L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.
Похожие записи
Showing 2 comments
  • Олег
    Ответить

    Используя 5 пункт — 301 редирект со страниц со слешем на без слеша (весь сайт) поломался весь сайт, пришлось лезть на хостинг

    • max
      Ответить

      Иногда на хостингах присутствуют свои правила переадресации например с http на https и в таком случае зачастую возникает ошибка о слишком большом количестве редиректов. В каждом конкретном случае правила надо проверять. Все правила тестились на нескольких VPS и некоторые на обычных хостингах и в 99% случаях все работало корректно. Пишите в личку помогу в вашем конкретном случае.

Оставить комментарий

Обратная связь

Мы всегда придем к взаимовыгодному сотрудничеству. Все вопросы и пожелания можно писать тут.

Not readable? Change text. captcha txt

Start typing and press Enter to search

Как отключить автоматическое обновление WordPressСтилизуем placeholder при помощи CSS