Jump to content

Примеры редиректов через .htaccesss


Recommended Posts

support

301 редирект с www на без www (настройка главного зеркала)

Самый распространенный случай, когда необходимо настроить редирект, это когда сайт доступен по нескольким адресам одновременно. Например: http://site.com и http://www.site.com. Это может мешать продвижению ресурса, так как в индексе поисковых систем могут появляться полные дубли страниц. Поэтому в файл .htaccess можно попробовать добавить такие строки:

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

или вот такой вариант

1
2
3
4
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

301 редирект с без www на www

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

или вот такой вариант

1
2
3
4
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

301 со старого адреса страницы сайта на новый

Когда вам нужно удалить страницу, но на нее ведет много качественных ссылок, чтобы сохранить эти ссылки и передать ее Page Rank другой странице, можно настроить редирект с этой страницы на максимально релевантную по смыслу другую. В таком случае вам могут помочь дополнительные строки кода в файле .htaccess такого вида:

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

где test и new-test – ваш варианты страниц

301 редирект со всех страниц одного домена на главную другого домена

Когда вам нужно переехать на абсолютно другой адрес сайта или вы купили хороший старенький домен и хотите его средиркетить, вам могут помочь вот эти дополнительные строчки кода в файле .htaccess того сайта, с которого будет работать перенаправление:

1
2
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]

где site.ru – сайт, на который будет идти редирект

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

1
2
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]

где site.ru – сайт, на который будет идти редирект

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

Если вы решились переехать на защищенный протокол https, необходимо настроить редирект с помощью этих строк:

1
2
RewriteCond %{HTTPS} =of
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

или можно попробовать такой вариант

1
2
3
4
5
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Редирект с https на http
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

301 редирект со страниц со слешем на без слеша (для всего сайта)

1
2
3
4
5
6
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]

или вот такой вариант

1
2
3
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

301 редирект со страниц без слеша на слеш (для всего сайта)

1
2
3
4
5
6
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

или вот такой вариант

1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru

1
2
3
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://site.ru/? [R=301,L]

или вот такой вариант

1
2
3
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]

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

1
2
RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ http://site.ru/ [R=301,L]

301 редирект для index.php, index.html или index.htm (например в Joomla), массовая склейка

1
2
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ http://site.ru/$1 [R=301,L]

Редирект с внутренней страницы на главную

1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^vnutrenyaya-stranica/$ http://www.site.ru/ [R=301,L]

Редирект с главной на внутреннюю страницу

1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^$ http://www.site.ru/vnutrenyaya-stranica/ [R=301,L]

Редирект всех внутренних страниц на главную

1
2
3
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule !(^$|.*\.(css|jpg|gif)) / [R=301,L]

Редирект с домена РФ на домен RU

1
2
RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://www.yourdomain.ru/$1 [R=301,L]

301 редирект каталога

1
RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]

 

Эти решения чаще всего подходят для основных задач, но иногда их необходимо дорабатывать совместно с разработчиками. Связано это с особенностями отдельных cms-систем.

Важная рекомендация: на многих хостингах по умолчанию может работать 302 или другой  3ХХ редирект. Поэтому рекомендуется всегда дописывать в свои правила [R=301,L].

Смена cms-системы и массовое изменение всех адресов страниц сайта

Бывают случаи, когда вы переезжаете на другую cms и адреса ваших страниц меняются следующим образом:

Было - site.com/category/kategoriya

Стало - site.com/kategoriya

В таком случае вам необходима массовая настройка редиректов по общему принципу и возможно вам помогут следующие строки в .htaccess:

1
2
RewriteEngine on
RewriteRule ^category/([^/]+)/?$ $1 [L]

 

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

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

Пример редирект с https://vamshop.ru/index.php на https://vamshop.ru/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://vamshop.ru/ [R=301,L]

 

Link to post
Share on other sites
×
×
  • Create New...