Редиректы в htaccess
Для начала включаем SEF (ЧПУ) в глобальных настройках и Перенаправление URL, далее файл htaccess.txt, который лежит в корне (увидите его когда по FTP зайдете), переименовываем в .htaccess (точка в начале), как раз в нем и будет работать.
Пояснение: 301 редирект (постоянное перенаправление с одного адреса на другой) используют для склейки url адресов, если страница изменила свой адрес или у одного документа имеется полный дубль по другому адресу.
Примеры:
1. У главной страницы сайта site.ru всегда присутствует полный ее дубль по адресу site.ru/index.php
Используем код для перенаправления:
Redirect 301 /index.php http://site.ru/
или
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://site.ru/ [R=301,L]
2. Если у вашего сайта несколько имен, но вы хотите, чтобы пользователи всегда видели в адресной строке основное имя сайта, используйте следующие строки сразу после RewriteEngine On:
RewriteCond %{HTTP_HOST} !^site.ru$ RewriteRule ^(.*) http://site.ru/$1 [R=301,L]
2.1 Редирект с www на без www
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
2.2 Редирект без www на www
RewriteCond %{HTTP_HOST} ^site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
3. 301 редирект на окончание .html (для тех у кого включен этот суффикс), перенаправит со страниц site.ru/article и site.ru/article/ на страницу site.ru/article.html
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?) RewriteRule .* %1.html [R=301,L] RewriteRule ^(.*)/$ /$1.html [R=301,L]
Или
REDIRECTMATCH 301 (.*/[^/.]+)($|\?)$ http://site.ru$1.html
4. Редирект с .html на без .html, т.е. с site.ru/article.html на site.ru/article (для тех кто сначала включил .html, а потом решил избавиться от него)
RewriteBase / RewriteRule (.*)\.html$ $1 [R=301,L]
Или
REDIRECTMATCH 301 (.*)\.html$ http://site.ru$1
5. Редирект для страниц с параметрами, например со страницы site.ru/blog?limitstart=0 на site.ru/blog
RewriteCond %{QUERY_STRING} ^limitstart=0 RewriteRule ^blog http://site.ru/blog? [R=301,L]
6. И еще допустим поменяли структуру и нужно чтобы все страницы старого раздела перенаправлялись на те же страницы только нового раздела, например site.ru/blog/raznoe/article на site.ru/blog/article
RewriteRule ^blog/raznoe/(.*)$ http://site.ru/blog/$1 [R=permanent,L]
7. 301 редирект с адреса без слеша на слеш, то есть с site.ru/article на site.ru/article/
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?) RewriteRule .* %1/ [R=301,L]
8. Редирект со слеша на без слеша в конце, т.е. с site.ru/article/ на site.ru/article
RewriteRule ^(.*)/$ /$1 [R=301,L]
еще вариант как избавиться от завершающего слеша на конце
RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/$ /$1 [R=301,L]
вариант избавления от слэша для страниц с параметрами, на примере страниц с пагинацией site.ru/categoriya?start=5/
RewriteCond %{QUERY_STRING} ^start=(\d+)/ RewriteRule ^(.*) /$1?start=%1 [R=301,L]
9. Сначала забыли включить SEO в глобальных настройках, а потом включили, как итог — в индексе много документов с /index.php в адресе. Избавиться можно так —
RewriteRule ^index.php/(.*)$ http://mysite.ru/$1 [R=permanent,L]
— по такому же принципу можно избавиться от какой либо вложенности, например редиректить с site.ru/ru/catalog на site.ru/catalog (/ru/ убирается)
10. Запрет доступа для плохих ботов
SetEnvIfNoCase User-Agent "^Baiduspider" bad_bot SetEnvIfNoCase User-Agent "^MSNBot" bad_bot SetEnvIfNoCase User-Agent "^Baiduspider" bad_bot SetEnvIfNoCase User-Agent "^Ezooms" bad_bot # продолжите список сами, указывайте юзер-агент плохих ботов Order Allow,Deny Allow from all Deny from env=bad_bot
robots.txt отдаёт, на остальное 404 (для юзер агент — Baiduspider и Ezooms )
RewriteCond %{HTTP_USER_AGENT} \b(Baiduspider|Ezooms)\b [NC] RewriteCond %{REQUEST_URI} !^/robots\.txt [NC] RewriteRule .* - [R=404]
———————————————————————————————-
Обратите внимание!
Любое изменение в .htaccess вы должны тестировать и проверять — все ли у вас работает на сайте, например, могут возникнуть проблемы с различными формами — авторизация, отправка сообщения\комментария и т.д., особенно при перенаправлениях с адреса без слеш на конце НА слеш или с адреса без .html НА .html в конце! Будьте внимательны.
Теги: 301 htaccess редирект