Перенаправления (редиректы) в .htaccess

Что такое перенаправления и для чего они нужны.  Редирект - автоматическая переадресация пользователей с одной страницы сайта на другую, или другой сайт. Редирект необходим при смене адреса страницы, при смене домена, при удалении страницы, что бы не потерять ее вес. Перенаправить можно как отдельную страницу, так и весь сайт, либо его  разделы.

Есть несколько основных редиректов:

301 - Moved Permanently (перемещено навсегда)
302 - Moved Temporarily (перемещено временно)
303 - See Other (смотреть другое).

Остановимся на 301-м редиректе, как наиболее благоприятном с точки зрения ПС, означающем окончательное перемещение страницы по новому адресу. 

Редиректы в примерах будут прописываться в файле конфигурации Apache - .htaccess. Для работы перенаправлений на сервере должен быть включен модуль mod_rewrite (с этим проблем как правило нет).

1. Перенаправление одной страницы (сайта) на другую

Самый простой редирект. Сначала прописывается ссылка на страницу с которой будет происходить перенаправление, затем страница на которую. Ссылки записываются через пробел.

RewriteRule ^page1 /page2 [R=301,L]

Таким образом можно перенаправить как отдельные страницы, так и раздел полностью. Для примера возмем категории cat1, cat2 и cat3. В первой категории есть страницы - str1, str2 и т.д. 

1.1. Если мы переместили все страницы категории cat1 в категорию cat2 (с изменением ссылок), то прописать нужно:

RewriteRule ^cat1 /cat2 [R=301,L]

1.2. Если в категорию cat2 были перемещены все страницы, кроме str3 и str5, которые были перемещены в категорию cat3, то сначала нужно перенаправить отдельные страницы, а затем всю категорию:

RewriteRule ^cat1/str3 /cat3/str3 [R=301,L]
RewriteRule ^cat1/str5 /cat3/str5 [R=301,L]
RewriteRule ^cat1 /cat2 [R=301,L]

1.3. В некоторых случаях после такой записи можно получить бесконечное перенаправление. Например вот такой случай - /cat1/sub на /cat1/sub-page

Здесь необходимо указать окончание ссылки:

RewriteRule ^cat1/sub$ /cat1/sub-page [R=301,L]

1.4. И еще вариант 301 редиректа:

Redirect 301 /cat/stranica.html /stranica2.html

2. Убираем "index.php" из урлов с перенаправлением:

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]

3. Перенаправление страниц без слеш, на страницы со слешем:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.html$
RewriteRule (.+) $1/ [R=301,L]

В таком варианте слеш будет добавлен ко всем урлам, кроме тех, где есть вконце .html, или уже добавлен слеш

А вот так для всех страниц где уже есть слеш, или .html, или id с любым числом (id5465, id54444 и т.д.). Удобно использовать, если нужно закрыть слешем категории, а страницы оставить без слеша.. если в урлах страниц есть что то общее

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.html$
RewriteCond %{REQUEST_URI} !/id([\d]+)$
RewriteRule (.+) $1/ [R=301,L]

4. Убираем часть ссылки из URL

4.1. К примеру, необходимо из ссылки "/catalog/category/product.html" убрать "catalog". Для этого пропишем в htaccess следующее правило:

RewriteRule ^catalog/(.+)$ /$1 [R=301,L]

4.2. Другой случай, если нужно убрать часть URL где то в середине. Пример, из ссылки "/catalog/subcat/item/product.html" убрать "item". Здесь прописываем следующее:

RewriteRule ^(.*)item/(.+)$ /$1$2 [R=301,L]

5. Перенаправление домена с WWW на домен без него

Для примера - домен этого сайта - замените на свой.

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^httpmaster\.ru [NC]
RewriteRule (.*) http://httpmaster.ru/$1 [R=301,L]

6. Перенаправление домена без WWW на домен с www

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.httpmaster\.ru [NC]
RewriteRule (.*) http://www.httpmaster.ru/$1 [R=301,L]
<в процессе>

Еще 4 материала, которые возможно Вам понравятся:

Добавить комментарий

Комментарии (0)