2.3.4 301 редирект через .htaccess
Применения правил .htaccess
Редиректы играют важную роль в веб-разработке, позволяя перенаправлять посетителей с одной страницы на другую. Один из наиболее распространенных типов редиректа - это 301 Moved Permanently, который указывает поисковым системам и браузерам, что страница была перемещена навсегда. Это важное средство для управления структурой Вашего сайта, позволяющее перенаправлять посетителей страницы на другой адрес.
В этой статье мы рассмотрим примеры готовых 301 редиректов с использованием файла .htaccess, который может находится как в корне Вашего сайта, так и быть создан в любой другой из его директорий. Каждый .htaccess файл применяется ко всем поддиректориям внутри той директории, в которой он находится. Это означает, что настройки, определенные в .htaccess внутри определенной директории, будут распространяться на все файлы и поддиректории внутри этой директории.
Примеры готовых 301-ых редиректов
1. Самый простой вариант - 301 редирект с одной страницы на другую:
Redirect 301 /example-1/ http://example.com/page-2/
Более подробный:
RewriteCond %{REQUEST_URI} ^/page/$
RewriteRule ^.*$ http://example.com/new-page/? [R=301,L]
2. 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]
3. 301 редирект с без www на www (главное зеркало – домен с www):
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)$ http://www.%1/$1 [L,R=301]
4. 301 редирект со страниц со слешем на без слеша (весь сайт):
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} ![^/]$
RewriteRule ^(.*)/$ /$1 [R=301,L]
5. 301 редирект со страниц без слеша на слеш (часто в CMS устанавливается автоматически):
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
6. Один (а не два последовательных) 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]
7. Один (а не два последовательных!) 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]
8. Один (а не два последовательных!) 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]
9. Один (а не два последовательных!) 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]
10. 301 редирект только адреса example.com/index.php
(без GET параметров) на основное зеркало example.com
:
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://example.com/? [R=301,L]
11. 301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в URL index.php)
Пример: перенаправление example.com/index.php?n=1
на example.com/?n=1
:
RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ http://example.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} /example/
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]
13. Все страницы одного домена на главную страницу другого домена:
RewriteCond %{REQUEST_URI} (.)
RewriteRule ^(.)$ http://example.com/ [L,R=301]
14. Каждая страница одного домена на такой же адрес другого URL:
RewriteCond %{REQUEST_URI} (.)
RewriteRule ^(.)$ http://example.com/$1 [L,R=301]