Как сделать 301 редирект

Простой редирект

Производится в файле .htaccess или httpd.conf для Apache. Самый простой вариант простого 301 редиректа для переадресации на новый домен выглядит следующим образом:

Redirect 301 / http://www.site.com/index.htm


В этом случае все страницы старого сайта будут перенаправлены на новый. Если вы хотите сделать 301 редирект для одной страницы, то можно использовать что-то вроде:

Redirect 301 /site1/page1.htm http://www.site2.com/page2.htm


Вот еще парочка примеров простого 301 редиректа:

RedirectPermanent / http://www.site2.com/

 

RedirectPermanent /old-catalog http://www.site2.com/new-catalog/


Можно поставить 2 условия – для редиректа сразу (нужно помнить что порядок следования важен):

Redirect permanent /test    http://www.test.com/
Redirect permanent /        http://enter.test.com/


Здесь при попадании пользователя или робота в директорию test он перенаправится на www.test.com, все остальные попадут на enter.test.com. Для этого 301 редиректа на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).

301 редирект с помощью mod_rewrite в .htaccess

С модулем mod_rewrite вы сталкивались достаточно часто даже не подозревая этого. В частности речь идет про постоянные ссылки (permalinks) как полезный инструмент в seo оптимизации wordpress. Если в админке настроите эти самые ссылки и после этого зайдете в файл .htaccess, то обнаружите там целый ряд правил для переадресации через директиву RewriteRule. Кроме того нужно проверить чтобы была подключена опция FollowSymLinks.

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

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]


Чуть более понятный синтаксис

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]


Редирект запросов без-www на домен с www префиксом

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]


или же альтернативный вариант:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]


Вообще использование www в названии сайта само по себе устарело, но иногда до сих пор встречается. Если вы создаете новый сайт, то конечно сразу указываете везде без www, но если получили “готовый продукт”, то нужно смотреть как домен отображается в выдаче Google и Яндекс – такой редитект и оставляете дабы ничего кардинально не менять.

301 редирект старого домена на новый:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]


Если хотите чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в .htaccess:

RewriteEngine   on
RewriteBase     /
RewriteRule     ^rewrite\.htm$  rewrite.html [R=permanent]


Для замены всех .htm файлов .html файлами:

RewriteEngine  on
RewriteBase     /
RewriteRule     ^(.*)\.htm$  $1.html [R=permanent]

Друзья!!!
Спасибо Вам всем большое за поддержку проекта. Если не сложно при переводе пишите в комментарий свой email. Я буду знать от кого и мне очень приятно будет оказать посильную помощь этому человеку.

Если кому нужен другой по функционалу плагин, модуль или еще что то пишите в комментариях.

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


Комментарии   

+3 # Бармалей 18.06.2014 07:39
Вчера разбирался с .htaccess.
Задачей было направить со старого сайта (virtuemart при чем без ЧПУ) ссылку вида

Цитата:
h_ttp:/oldsite.com/index.php?page=shop.browse&category_id=35&option=com_virtuemart&Itemid=2
на новый Цитата:
h_ttp :/newsite.com/path
(нижний дефис «_» после h - лишнее)
простой редирект упрямо не будет работать:
Redirect 301 /index.php?page=shop.browse&category_id=35&option=com_virtuemart&Itemid=2 h_ttp:/newsite.com/path
Для того, чтобы у нас все получилось нужно в файле .htaccess желательно под RewriteEngine On написать следующее:
RewriteCond %{QUERY_STRING} category_id=(35) [NC]
RewriteCond %{QUERY_STRING} Itemid=(2) [NC]
RewriteRule h_ttp :/newsite.com/path/? [R=301,L]
Где:
category_id и Itemid идентифицируют страницу категории товаров в виртуамарте
.* - обращает код ко всему сайту
? – после адреса ссылки отрезает лишнее в урл
Таким образом редиректить можно даже дубли страниц. К примеру этот код помог мне отредиректить две ссылки:
Цитата:
/index.php?page=shop.browse&category_id=35&option=com_virtuemart&Itemid=2

и
Цитата:
/index.php?option=com_virtuemart&page=shop.browse&category_id=35&Treeid=104&Itemid=2
Удачи!
Огромное спасибо Алексею за помощь!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору