Что такое 301 редирект
301 редирект (301 Permanent Redirect) — ответ сервера, а также серверное перенаправление с одного url-адреса на другой. Благодаря такому перенаправлению можно автоматически отправлять пользователя или поисковую систему со старого адреса страницы на новый. Этот ответ сервера указывает поисковым системам, что страница была перемещена на другой адрес, поэтому старый url можно считать устаревшим. После того, как пройдет переиндексация, поисковые системы «склеят» их и будут предлагать пользователям новый.
Где настраивается 301 редирект
Существует несколько наиболее часто используемых способов настройки 301 редиректов:
— через php условие
Когда браузер получает команду вместо одной страницы открыть вторую. Если Ваш сайт сделан на какой-то CMS, то есть вероятность того, что у неё есть функция редиректа с корня на файл index. В этом случае откройте index.php, который находится в корне Вашего движка и пропишите:
где первая строка указывает какой url-адрес должен перенаправлять, а вторая — на какой url-адрес должно выполняться перенаправление.
— в конфигурационном файле, например в .htaccess
в таком случае редирект будет работать на уровне сервера и восприниматься как серверная команда. В этой статье мы поговорим о настройке редиректа в файле .htaccess, а также, в каких случаях и с помощью каких комбинаций строк кода настраиваются те или иные редиректы.
В каких случаях нужно использовать 301 редирект
301 редирект с www на без www (настройка главного зеркала)
Самый распространенный случай, когда необходимо настроить редирект, это когда сайт доступен по нескольким адресам одновременно. Например: http://site.com и http://www.site.com. Это может мешать продвижению ресурса, так как в индексе поисковых систем могут появляться полные дубли страниц. Поэтому в файл .htaccess можно попробовать добавить такие строки:
или вот такой вариант
301 редирект с без www на www
или вот такой вариант
301 со старого адреса страницы сайта на новый
Когда вам нужно удалить страницу, но на нее ведет много качественных ссылок, чтобы сохранить эти ссылки и передать ее Page Rank другой странице, можно настроить редирект с этой страницы на максимально релевантную по смыслу другую. В таком случае вам могут помочь дополнительные строки кода в файле .htaccess такого вида:
где test и new-test – ваш варианты страниц
301 редирект со всех страниц одного домена на главную другого домена
Когда вам нужно переехать на абсолютно другой адрес сайта или вы купили хороший старенький домен и хотите его средиркетить, вам могут помочь вот эти дополнительные строчки кода в файле .htaccess того сайта, с которого будет работать перенаправление:
где site.ru – сайт, на который будет идти редирект
301 редирект с каждой страницы одного домена на такой же адрес другого
где site.ru – сайт, на который будет идти редирект
Редирект с http на https
Если вы решились переехать на защищенный протокол https, необходимо настроить редирект с помощью этих строк:
или можно попробовать такой вариант
301 редирект со страниц со слешем на без слеша (для всего сайта)
или вот такой вариант
301 редирект со страниц без слеша на слеш (для всего сайта)
или вот такой вариант
301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru
или вот такой вариант
301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php)
301 редирект для index.php, index.html или index.htm (например в Joomla), массовая склейка
Редирект с внутренней страницы на главную
Редирект с главной на внутреннюю страницу
Редирект всех внутренних страниц на главную
Редирект с домена РФ на домен RU
301 редирект каталога
Эти решения чаще всего подходят для основных задач, но иногда их необходимо дорабатывать совместно с разработчиками. Связано это с особенностями отдельных cms-систем.
Важная рекомендация: на многих хостингах по умолчанию может работать 302 или другой 3ХХ редирект. Поэтому рекомендуется всегда дописывать в свои правила [R=301,L].
Смена cms-системы и массовое изменение всех адресов страниц сайта
Бывают случаи, когда вы переезжаете на другую cms и адреса ваших страниц меняются следующим образом:
Было — site.com/category/kategoriya
Стало — site.com/kategoriya
В таком случае вам необходима массовая настройка редиректов по общему принципу и возможно вам помогут следующие строки в .htaccess:
Следует понимать, что в каждом конкретном случае и разными сайтами эти правила могут быть не до конца актуальными, поэтому перед тем как изменять содержимое файла .htaccess, предварительно рекомендуется сделать его копию на всякий случай.
Если они вам все таки не подошли, следует обратиться к разработчиками, которые знают особенности вашего движка и смогут доработать предлагаемые выше варианты.
Почему 301 редирект, а не 302 и другой 30х — опыт из нашей практики
С точки зрения SEO, следует всегда использовать 301 редирект, в случае, если вы хотите перенаправлять и пользователей и поисковых роботов на новый адрес.
302 редирект — временное перенаправление только пользователей на другой адрес. Поисковые системы в таком случае не понимают что страница переехала, поэтому в поисковой выдаче может быть как старая, так и новая. То есть, этот ответ сервера не указывает поисковым системам, что страница была перемещена на другой адрес. Он говорит, что старая страница временно находится на реконструкции и ее следуют сохранить в индексе.
Эту разницу чаще всего разработчики не понимают, поэтому после редизайна сайта или переезда на новый адрес следует всегда проверять ответ сервера и рекомендуется оформлять его как 301.
Вот случай когда сайт переехал с домена kiev.ua на ua, а чуть позже еще и на защищенный протокол https, но разработчики настроили не 301, а 302 редирект. Результат:

Пока работал такой редирект и поисковые системы считали его временным, в индексе Google и Яндекс находилось 3 копии одного и того же сайта. Что впоследствии привело к очень сильному проседанию позиций в поиске.
Как только 302 редирект был изменен на 301, поисковые системы произвели склейку, исключили дубли из индекса и позиции очень быстро вернулись на прежние места в поиске.
Важно знать и помнить — если вы хотите, чтобы поисковые системы считали два разных адреса как один — должна работать переадресация на основной, с помощью 301 редиректа. В противном случае в индексе остается страница со старым адресом и появляется страница с новым, как в приведенном выше примере. Использование 302 или любых 30х редиректов, как правило, с точки зрения SEO не приводит ни к чему хорошему. Проверить ответ сервера можно на этом сайте — bertal.ru.
q-seo.com.ua
Основные операторы регулярных выражений
Перед тем, как настраивать правильные 301 редиректы в файле .htaccess нужно чётко различать основные операторы регулярных выражений (спецсимволы, модификаторы, флаги):
спецсимволы:
- ^ — ограничение слева (начало строки);
- $ — ограничение справа (конец строки);
- . — любой символ;
- () — переменная;
- — экранирование (символ после считается обычным, а не спецсимволом);
- [] — диапазон значений;
- ! — спецсимвол отрицания;
модификаторы:
- ? — символ повторяется 0 или 1 раз;
- + — 1 и более символов (до 65536);
- * — 0 и более символов (до 65536);
Настройка 301 редиректов в файлах htaccess и web.config
Я публикую здесь только проверенные и технически законченные рабочие варианты 301 редиректов. База рабочих вариантов 301 редиректов будет пополняться.
Редирект со старой статической (чпу) страницы на новую страницу:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.seowind.ru$ [NC]
RewriteRule ^baza-znanij-seo/nastrojka-301-redirekta/$ https://www.seowind.ru/newpage/ [R=301,L]
Редирект на главную страницу:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.seowind.ru$ [NC]
RewriteRule ^baza-znanij-seo/nastrojka-301-redirekta/$ https://www.seowind.ru/ [R=301,L]
Редирект с главной на внутреннюю страницу:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.seowind.ru$ [NC]
RewriteRule ^$ https://www.seowind.ru/baza-znanij-seo/nastrojka-301-redirekta/ [R=301,L]
Редирект со страниц сайта с WWW на страницы без WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.seowind.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://seowind.ru/$1 [R=301,L]
Редирект со страниц сайта без WWW на страницы с WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^seowind.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ https://www.seowind.ru/$1 [R=301,L]
Следующий пример позволяет убрать слеш на конце урла.
Редирект 301 со страниц со слешем на конце на страницы без него:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
А здесь добавляем слеш в конец урла:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
301 редирект с index.php на главную:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ https://www.seowind.ru/ [R=301,L]
Редирект всех внутренних страниц на главную:
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule !(^$|.*.(css|jpg|gif)) / [R=301,L]
Редирект урла с параметром на любую внутреннюю страницу сайта: (Например, со страницы http://www.site.ru/news.php?category=1 на http://www.site.ru/news.php?category=2 (здесь параметр category=)):
RewriteEngine On
RewriteCond %{QUERY_STRING} category=1
RewriteRule ^news.php http://www.site.ru/news.php?category=2 [R=301,L]
Редирект урла с параметром на главную страницу сайта: (Например, http://site.ru/index.php?show_section=12 на главную страницу http://site.ru/ (здесь параметр show_section=12)):
RewriteEngine On
RewriteCond %{QUERY_STRING} show_section=12
RewriteRule ^index.php http://site.ru/? [R=301,L]
Редирект со старого домена на новый (прописываем в htaccess старого сайта):
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.siteold.ru$ [NC]
RewriteRule ^(.*)$ http://sitenew.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^siteold.ru$ [NC]
RewriteRule ^(.*)$ http://sitenew.ru/$1 [L,R=301]
Редирект с домена РФ на домен RU. Здесь важно знать, что РФ зона преобразуется в .xn--p1ai, а само название кириллического домена в соответствующий код (punycode) на латинице xn-….
RewriteCond %{HTTP_HOST} ^xn-....xn--p1ai$ [NC]
RewriteRule ^(.*)$ https://www.seowind.ru/$1 [R=301,L]
301 редирект каталога:
RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]
Вы наверное в своей практике встречали случай, когда есть 2 сайта с одинаковой информацией, но в то же время доступные по разным адресам (сайты дубли). У этих сайтов одинаковый robots.txt, sitemap.xml и один на двоих .htaccess. Предлагаю вариант 301 редиректа с неосновного такого сайта (site2) на основной (site1):
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site2.ru$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.site2.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://www.site1.ru/$1 [R=301,L]
Вставка включающая в себе все редиректы со страниц index|default с расширениями htm|html|php|asp|aspx на главную:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET .*/(index|default).(htm|html|php|asp|aspx) HTTP
RewriteRule ^(.*)(index|default).(htm|html|php|asp|aspx)$ http://www.site.ru/$1 [R=301,L]
Пример редиректа со страниц без WWW на страницы с WWW в web.config для IIS:
<system.webServer> <rewrite> <rules> <rule name="Redirect to WWW" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^seowind.ru$" /> </conditions> <action type="Redirect" url="https://www.seowind.ru/{R:0}" redirectType="Permanent" /> </rule> </rules> </rewrite>
Пример редиректа со страницы default.aspx на главную в web.config для IIS:
<system.webServer> <rewrite> <rules> <rule name="Imported Rule 1"> <match url="^default.aspx" ignoreCase="false" /> <conditions> <add input="{QUERY_STRING}" pattern="^$" ignoreCase="false" /> </conditions> <action type="Redirect" redirectType="Permanent" url="https://www.seowind.ru/" /> </rule> </rules> </rewrite>
301 Редирект через PHP
<?php header("Location: http://newdomain.ru/new/location/", true, 301); ?>
www.seowind.ru
Как настроить 301 редирект htaccess
Начнем с 301 редиректа в htaccess. Во-первых, он представляет из себя автоматическую переадресацию с одного адреса на другой. Он вполне может применяться в том случае, когда сайт переводится с протокола http на https, когда сайт перенастраивается с «полноразмерных» адресов на ЧПУ (т.е. было https://www.karcher.xyz/content/news/31-01-2017/razdatka, стало https://www.karcher.xyz/ razdatka), а также для «склеивания» страниц-дублей. Во-вторых, 301 редирект сообщает поисковым системам, что «ребята, имеющийся у вас адрес уже не работает, поэтому идите вон туда», а они такие «ОК, учтем». Таким образом, переадресация происходит безболезненно, без потери позиций и ссылочной массы.
Но что будет, если «Ой, да ну нафиг? Буду я еще с переадресациями заморачиваться, только время потеряю!»? Можно сделать и так, НО… история «старой» страницы будет утрачена, а «новая» будет ранжироваться «с нуля». Как следствие – потеря позиций и ссылочной массы (это в лучшем случае).
Варианты применения 301 редиректа:
- Склейка доменов;
- Переезд сайта на другой адрес (может пригодиться при попадании сайта под какие-либо фильтры);
- Для увеличения показателей тИЦ, PR и увеличения трафика при покупке другого домена (настраивается редирект на ресурс, который нуждается в поднятии тИЦ и PR);
- При смене движка сайта (в этом случае настройка 301 редиректов строго обязательна, в противном случае гарантирована полная потеря трафика);
- при переезде с http на https;
- склейка «дублей»
и т.д., всех причин не перечислить.
301 Редирект при смене домена основного сайта
Итак, Вы решили сменить домен. Сразу же даем готовое решение:
- переделываем robots.txt на старом домене. Готовый текст файла:
- настраиваем 301 редирект для всех страниц сайта (кроме файла robots.txt) с помощью приведенного ниже кода:
Всё!
301 редирект при смене адреса страницы
Постраничный редирект (когда меняется адрес страницы) осуществляется с помощью приведенного ниже кода:
Именно этот код используется при «переезде» страниц, например, на ЧПУ.
Настроить редирект с www на домен без www в htaccess
Упоминание www. в адресе домена уже давно не является актуальным. Тем не менее сайтов с www. полно. Склеивание доменов с www. и без должно производиться в строго обязательном порядке, т.к. поисковые системы воспринимают эти 2 домена как 2 разных сайта с разными тИЦ, PR, посещаемостью, ссылочной массой и всем остальным. Следовательно, один из них – оригинал, а второй – «самозванец» с «ворованным контентом». Чтобы этого не происходило – домены с www. и без необходимо «склеить» с помощью 301 редиректа. Код настройки приведен ниже.
Код редиректа с www на без www в htaccess выглядит так:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Теперь давайте разберемся с директивами.
RewriteEngine on/off – если выражаться простым человеческим языком – она служит выключателем 301 редиректа.
RewriteCond — в этой директиве прописываются условия для «срабатывания» следующей директивы.
RewriteRule — директива преобразования одного адреса в другой.
Настроить 301 редирект с http на https через htaccess
Переезд с http на https многие считают «современным трендом». Однако, на сегодняшний день данная мера является обязательной (хотя формально она таковой не является). И вот настал тот час, когда Вы получили SSL-сертификат, Ваш сайт уже работает и по http и по https. Все что осталось настроить в файле .htaccess 301 редирект с http на https версии страниц сайта. Код для настройки приведен ниже.
А вот код на обратный редирект с https на http. Как видите, отличие всего в 1 символ:
Редирект со страниц index.php, index.html
По большей части речь пойдет про склеивание дублей, которых может образовываться огромное количество.
Поскольку в подзаголовке упомянуты index.php и index.html – Вы уже догадались, что с помощью 301 редиректа мы будем избавляться от дублей главной страницы:
Однако, если у главной страницы есть дубль вида site.ru/index.php, вполне вероятно, что и у остальных страниц есть дубли вида site.ru/index.php/page.html (при оригинальном адресе site.ru/page.html). Это плохо, поэтому также требуется настройка 301 редиректа с помощью приведенного ниже кода:
Нередки случаи, когда у главной страницы есть дубль вида
site.ru/main.html, для которого так же необходимо прописывать 301 переадресацию на site.ru:
Либо альтернативный вариант:
Redirect 301 /main.html HYPERLINK «http://site.ru/» http://site.ru/
А вот теперь рассмотрим обратную ситуацию – когда Вы хотите склеить дубли, настроив переадресацию с site.ru на site.ru/main.html. Сделать это можно с помощью приведенного ниже кода.
Ну а если Вам важно, чтобы адреса всех внутренних страниц отображались без .html на конце, то redirect настраивается вот таким кодом:
Теперь о том как сделать редирект со страницы на страницу а именно с .htm на страницы .html. Для настройки такой переадресации достаточно добавить в .htaccess следующий код:
Редиректы с адресов со слэшами в конце и без них
Для начала рассмотрим еще один вид дублей страниц – страницы вида http://site.xyz/page и http://site.xyz/page/ — кроме слэша в конце, они ничем не отличаются. Настраивать redirect можно и с первой на вторую, и со второй на первую. Рассмотрим оба варианта:
Редирект с http://site.xyz/page на http://site.xyz/page/:
Redirect с http://site.xyz/page/ на http://site.xyz/page:
Причем абсолютно не важно, будет ли у Вас после редиректа слэш в конце адреса или нет. Главное – чтоб эти адреса были склеены с помощью 301 редиректа.
Редирект на мобильную версию сайта
Разумеется, если Ваш сайт работает на движке WordPress или Joomla, то настроить редирект на мобильную версию сайта можно с помощью плагинов.
Однако, Google является сторонником адаптивного дизайна. Следовательно, выделять отдельный домен/поддомен для мобильной версии не нужно. Т.е. в Google утверждают, что «если есть возможность обойтись без редиректов на мобильную версию – именно так и нужно поступать».
Но что делать, если без таких редиректов все-таки не обойтись?
JavaScript редирект
Однако, это не совсем верный способ, т.к. столь низкое разрешение далеко не у всех смартфонов, даже бюджетных. Гораздо правильнее заменить в коде число 480 на 720, большинство современных смартфонов имеет разрешение не менее, чем 1280 пикселей в высоту и 720 в ширину.
302 редирект
302 – это временная переадресация (по сути, это единственное отличие от 301 редиректа). Но где она может применяться?
Самый простой пример – акции в интернет-магазинах. Самым правильным решением в этом случае будет создание основного адреса, с которого будет производиться переадресация.
Т.е. есть постоянный адрес (например, https://inet-market.xyz/sales/) и сегодня с него происходит редирект на страницу https://inet-market.xyz/sales/december/, т.е. на страницу с декабрьскими акциями. Ну а через несколько дней 302 redirect перенастраивается на https://inet-market.xyz/sales/new-year/, т.е. на страницу с новогодними акциями.
И в таких ситуациях 302 редирект не только уместен, но и является самым правильным решением.
Основные причины применения 302 редиректа:
- Когда основная страница находится на стадии разработки/доработки/редактировании, поэтому ее надо скрыть от глаз посетителей, настроив временный редирект на другую страницу.
- Когда требуется, чтобы индексировалась и та страница, с которой происходит перенаправление, и та страница, куда перенаправляют;
- Когда требуется, чтобы в данный момент пользователи видели именно новую страницу, а не старую (например, если в будущем планируется «возвращение» к «старой» странице);
- Когда индексирование конечной страницы практически в будущем перестанет играть свою роль (т.е. когда страница создается временно);
- «Конечная» страница будет периодически меняться.
При правильном использовании, 301 и 302 редиректы могут оказать огромное влияние как на ранжирование сайта в поисковых системах, так и на комфортное пользование сайта посетителями.
Как проверить 301 редирект
Проверить 301 редирект крайне просто. Вводим в адресную строку старый адрес и смотрим, что будет происходить. Если редирект настроен правильно – адрес в строке изменится. Если нет – значит переадресация настроена неверно.
ВАЖНО! Перед тем как делать выводы о том, что «что-то тут не так», почистите кэш браузера и повторите попытку.
Другой способ – воспользоваться онлайн-сервисами по проверке кода ответа сервера. Например, http://4web.su/s_redirect/. Вводим имя домена и проверяем код ответа. Если редирект настроен правильно, то код ответа будет либо 301, либо 302 (в зависимости от того, какую именно переадресацию Вы настраивали). На некоторых сервисах (кстати, 4web.su – один из них) может отображаться еще и код, который сервер отдает уже после переадресации. Единственный допустимый код в этом случае – 200 ОК.
В данном случае мы попытались проверить как работает http-версия нашего сайта. Во-первых, мы получили сообщение о том, что у нас настроен 301 редирект (т.е. постоянный), новый адрес (https-версия сайта), а также отображены 2 кода ответа — 301 Moved Permanently и 200 ОК.
Если же вместо 200 ОК вылезает код 404 (как на приведенном ниже скриншоте) – значит редирект настроен неправильно.
Как сделать редирект без .htaccess
Большинство программистов настраивает редиректы путем прописывания ранее приведенных кодов в файле .htaccess. Основной минус такого подхода в том, что можно неплохо «накосячить», т.е. код в файл внесли, но он почему-то не срабатывает (или срабатывает, но неправильно). Причины могут быть самыми разными – возможен косяк в самой CMS, либо код на редирект должен располагаться выше/ниже, и т.д., вариантов масса. Поэтому существуют и альтернативные способы настройки редиректа. Например, PHP или JavaScript.
PHP редирект
Во-первых, PHP-это сервероориентированный язык.
Во-вторых, редирект будет происходить на сервере, а не в браузере пользователя.
В-третьих, каждой страничке, на которую будет производиться редирект, присваивается свой уникальный REFERER, а это значит, что скрыть страницу-источник не получится.
Важно понимать, что код редиректа необходимо вставлять таким образом, чтобы его чтение происходило еще до выведения на экран самого первого символа. Т.е. если перед <? поставить пробел, то редирект уже не сработает.
PHP-редиректы необходимо оформлять в отдельные php-файлы.
Код редиректа на примере файла index.php:
или
В зависимости от того, 301 редирект Вы хотите настроить, или 302. С помощью PHP обычно настраивается 302 редирект.
Простейший javascript-редирект
Основной минус данного способа в том, что не у всех (но у большинства) пользователей включен в браузере JavaaScript. Если JavaScript в браузере отключен – редиректа не произойдет.
Второй минус заключается в том, что возникает ощущение задержки. Это связано с тем, что сначала прогружается одна html-страница с белым экраном, и только после этого происходит переадресация.
Оформляется редирект в <body> либо в <head>:
ВАЖНО!!! Данный код в любом случае сработает быстрее, чем код Яндекс.Метрики, а это значит, что Яндекс до редиректа посетителя не засчитает.
Настроить 301 редирект в WordPress
Ранее мы уже говорили, что в WordPress удобнее всего настраивать редиректы с помощью плагинов. О них и поговорим.
Плагин Redirection. Это самый популярный плагин для настройки редиректов. Он почти никогда не жаловался на «извините, у меня с новой версией движка несовместимость», а если и жаловался – то разработчики в считаные часы вносили в плагин все необходимые для совместимости изменения. Число скачиваний уже перевалило за несколько миллионов.
Число переадресаций, которые через него можно настроить, не ограничено. Плюс бонусом можно отслеживать статистику по настроенным с помощью этого плагина редиректам и даже отслеживать ошибочные перенаправления (когда после переадресации отдается код не 200 ОК, а 404 Not Found).
Единственный минус этого плагина в том, что он англоязычный. Но разобраться с настройкой редиректов крайне просто: указываем адрес, откуда будет происходить переадресация, указываем адрес, куда надо переадресовать, выбираем из списка код ответа, добавляем комментарий (при необходимости) и сохраняем. Готово!
Если этот плагин чем-то не устраивает, можно рассмотреть альтернативный — Safe Redirect Manager (разработчик – компания 10up). Принципиально ничем не отличается.
Не грех упомянуть Simple 301 Redirects, но он необходим исключительно для настройки 301 редиректа.
Настройка редиректов в Joomla
Самое ужасное – получение битых ссылок «из ниоткуда». «Да как так-то? Еще вчера все отлично работало! Почему теперь страница не найдена?». Это связано с тем, при обновлении контента, добавлении товаров/продуктов, либо по каким-то иным причинам, адреса могут меняться. И что делать? Правильно – настройка 301 редиректа будет единственным правильным решением. Как и в WordPress, в Joomla данный вопрос решается путем работы с плагинами, т.е. без вмешательства в .htaccess.
И сразу же конкретный пример, когда такое может произойти. Интернет-магазины на Joomla – это не редкость. И вот в магазин поступил новый смартфон, какой-нибудь Gopo Center C4. Менеджеры создают под него карточку товара, затем заказывается реклама и делается рассылка, а затем директор магазина говорит менеджеру «А почему в заголовке не указали, что он в черном и белом цвете? Исправить!», менеджер вносит исправления, вследствие чего адрес ссылки меняется. Итог – вся реклама и рассылка превращается в пустой слив бюджета, т.к. прошлая ссылка уже не работает. И вот тут есть 2 выхода – откорректировать адрес ссылки вручную (на сайте интернет-магазина, но это отдельная тема для разговора), либо настроить 301 редирект со старого адреса на новый.
Теперь о том, как решить эту проблему через 301 редирект.
1. Необходимо убедиться, что редирект-плагин включен.
Для этого в админке выбираем Расширения => Менеджер плагинов.
Ищем в списке установленных плагинов «Система – Перенаправление» и включаем (если он выключен).
2. Проверяем «плохие» адреса.
В верхнем меню переходим в Компоненты => Перенаправление, там будет список всех “плохих” URL вашего Joomla-сайта.
3. Настраиваем переадресацию.
Выбираем URL, с которого нужно сделать переадресацию, затем в “URL назначения» вводим новый адрес (разумеется рабочий), при необходимости добавляем комментарий, убеждаемся, что установлен статус «Включено» и сохраняем изменения.
Т.е. для решения данной задачи хватает стандартного плагина Joomla, который идет с движком «с завода».
Настройка редиректа на OpenCart
Формирование адресов на OpenCart – это очень больная тема. А чтобы Вам было проще понять, насколько она на этом движке большая, просто взгляните на то, какой вид имеет адрес главной страницы:
site.com/index.php/?route=common/home
И это вместо site.com
Почему разработчики так эту проблему не решили – не понятно. Видимо, в этих «хвостах» зашифрованы послания тем, кто пытается через тайну Вселенной постичь тайну сокровищ Майя. Но т.к. среди простых землян таких нет (или есть?), то проблема перекладывается с разработчиков движка на программистов сайта.
Решить проблему можно несколькими способами:
Способ 1. В папке templates/common найти файлы header.tpl и footer.tpl и произвести в них замену кода с <?php echo $home; ?> на <?php echo $base; ?>
Способ 2. Настройка редиректа на site.com через .htaccess, вставив вот этот код:
Таким же (а именно – вторым) способом можно настроить редиректы со старых адресов категорий на новые. По умолчанию адреса ссылок в OpenCart выглядят примерно следующим образом:
site.com/index.php?path=83_94_113&route=product/category
На такие ссылки смотреть очень больно, причем в прямом смысле, т.к. глаза реально начинают болеть при виде таких адресов. В том же .htaccess можно настроить редирект на «человеческие» адреса вида site.com/category с помощью такого кода:
Но что делать с динамическими адресами, которые из-за привязки к определенной секции имеют вид site.com/katalog?c=okna-pvkh?
Программисты довольно долго искали решение. «Методом тыка» (точнее — проб и ошибок) решение было найдено. В данном случае происходит редирект на главную страницу сайта:
Примечания и ошибки
Теперь поговорим о том, как не допускать ошибок при настройке 301 редиректа:
- Нельзя нарушать последовательность правил переадресации. После настройки редиректа необходимо убедиться, что настройка не дала каких-либо «побочных эффектов». Если нарушить последовательность правил, то ранее настроенные редиректы могут либо прекратить функционировать, либо функционировать неправильно. Противоречий в правилах быть не должно.
- Не стесняйтесь пользоваться официальными мануалами, т.к. у 301 редиректа из-за непростого синтаксиса есть множество особенностей. Упустить какой-то нюанс при настройке – проще простого.
- После очередных «допиливаний» ВСЕГДА проводите полную проверку работоспособности тех правил, которые были внедрены ранее. Настройка без проверки – это не настройка даже «для галочки». Один лишний символ может «обвалить» работу всего сайта, либо заставить его работать неправильно. За другими программистами нам уже не раз приходилось исправлять работу сайта, когда с адреса site.com/oldpage происходит 301 редирект на site.com/newpage, а затем с помощью того же 301 редиректа происходит переадресация обратно на site.com/oldpage и далее «по кругу».
Ну и в заключение приведем несколько примеров, когда применять 301 переадресацию вообще нельзя.
Во-первых, «многоходовки», когда идет череда из нескольких 301 редиректов подряд. Гораздо правильнее настроить редирект сразу на «финишный» адрес.
Во-вторых, если по каким-то причинам есть 2 страницы с дублирующим контентом, но нужно сохранить для пользователей обе.
В-третьих, редиректы «не туда». Т.е. если страница переехала с первого адреса на второй, а при настройке редиректа Вы ошибочно указываете адрес совершенно другой страницы.
В-четвертых, redirect на страницу, которая работает по каким-то причинам очень некорректно. Страница должна работать стабильно и отдавать либо код 200, либо код 404.
В-пятых, редирект файла robots.txt. Это запрещено правилами многих поисковых систем. Более того, многие допускают одну и ту же ошибку – когда настраивают htaccess редирект на https с http://site.xyz/robots.txt на https://site.xyz/robots.txt. Файл robots.txt должен быть доступен по обоим адресам без всяких переадресаций. Ровно то же самое касается и xml-карты сайта.
stokrat.org
Добрый день. Не могу найти 301 редирект со страниц без слеша на слеш, ваши варианты тоже не подошли, можете помочь? Ниже предоставляю свой файл .htaccess
AddDefaultCharset UTF-8
DirectoryIndex index.php
Options All -Indexes
Header set Cache-Control «max-age=43200»
Header set Cache-Control «max-age=604800»
Header set Cache-Control «max-age=2592000»
Header unset Cache-Control
ExpiresActive On
ExpiresDefault «access plus 5 seconds»
ExpiresByType image/x-icon «access plus 2592000 seconds»
ExpiresByType image/jpeg «access plus 2592000 seconds»
ExpiresByType image/png «access plus 2592000 seconds»
ExpiresByType image/gif «access plus 2592000 seconds»
ExpiresByType application/x-shockwave-flash «access plus 2592000 seconds»
ExpiresByType text/css «access plus 604800 seconds»
ExpiresByType text/javascript «access plus 604800 seconds»
ExpiresByType application/javascript «access plus 604800 seconds»
ExpiresByType application/x-javascript «access plus 604800 seconds»
ExpiresByType text/html «access plus 43200 seconds»
ExpiresByType application/xhtml+xml «access plus 600 seconds»
php_value post_max_size 80M
php_value upload_max_filesize 50M
ErrorDocument 404 http://mir-gardin.com.ua/404.php
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mir-gardin.com.ua$ [NC]
RewriteBase /
RewriteRule ^.htaccess$ — [F]
RewriteRule ^admin/$ /admin/index.php [L]
RewriteRule ^admin/promotion$ /admin/promotion.php [L]
RewriteRule ^admin/promotion/$ /admin/promotion.php [L]
RewriteRule ^admin/services$ /admin/services.php [L]
RewriteRule ^admin/services/$ /admin/services.php [L]
RewriteRule ^admin/main$ /admin/main.php [L]
RewriteRule ^admin/main/$ /admin/main.php [L]
RewriteRule ^admin/catalog$ /admin/catalog.php [L]
RewriteRule ^admin/catalog/$ /admin/catalog.php [L]
RewriteRule ^admin/contacts$ /admin/contacts.php [L]
RewriteRule ^admin/contacts/$ /admin/contacts.php [L]
RewriteRule ^admin/news$ /admin/news.php [L]
RewriteRule ^admin/news/$ /admin/news.php [L]
RewriteRule ^admin/about_us$ /admin/about_us.php [L]
RewriteRule ^admin/about_us/$ /admin/about_us.php [L]
RewriteRule ^admin/pay$ /admin/pay.php [L]
RewriteRule ^admin/pay/$ /admin/pay.php [L]
RewriteRule ^admin/reviews$ /admin/reviews.php [L]
RewriteRule ^admin/reviews/$ /admin/reviews.php [L]
RewriteRule ^admin/our_works$ /admin/faq.php [L]
RewriteRule ^admin/our_works/$ /admin/faq.php [L]
RewriteRule ^admin/producers$ /admin/producers.php [L]
RewriteRule ^admin/producers/$ /admin/producers.php [L]
RewriteRule ^admin/fotogallery$ /admin/fotogallery.php [L]
RewriteRule ^admin/fotogallery/$ /admin/fotogallery.php [L]
RewriteRule ^admin/header$ /admin/header.php [L]
RewriteRule ^admin/header/$ /admin/header.php [L]
RewriteRule ^admin/menu$ /admin/menu.php [L]
RewriteRule ^admin/menu/$ /admin/menu.php [L]
RewriteRule ^admin/options_lr$ /admin/options_lr.php [L]
RewriteRule ^admin/options_lr/$ /admin/options_lr.php [L]
RewriteRule ^admin/modules$ /admin/modules.php [L]
RewriteRule ^admin/modules/$ /admin/modules.php [L]
RewriteRule ^admin/footer$ /admin/footer.php [L]
RewriteRule ^admin/footer/$ /admin/footer.php [L]
RewriteRule ^admin/per_page$ /admin/per_page.php [L]
RewriteRule ^admin/per_page/$ /admin/per_page.php [L]
RewriteRule ^admin/rights$ /admin/rights.php [L]
RewriteRule ^admin/rights$ /admin/rights.php [L]
RewriteRule ^admin/user_data$ /admin/user_data.php [L]
RewriteRule ^admin/user_data/$ /admin/user_data.php [L]
RewriteRule ^admin/user_files$ /admin/user_files.php [L]
RewriteRule ^admin/user_files/$ /admin/user_files.php [L]
RewriteRule ^admin/meta$ /admin/meta.php [L]
RewriteRule ^admin/meta/$ /admin/meta.php [L]
RewriteRule ^admin/fav$ /admin/fav.php [L]
RewriteRule ^admin/fav/$ /admin/fav.php [L]
RewriteRule ^admin/files$ /admin/files.php [L]
RewriteRule ^admin/files/$ /admin/files.php [L]
RewriteRule ^admin/articles$ /admin/articles.php [L]
RewriteRule ^admin/articles/$ /admin/articles.php [L]
RewriteRule ^$ /index.php [L]
#RewriteRule ^404$ /404.php [L]
RewriteRule ^registration$ /registration.php [L]
RewriteRule ^registration/$ /registration.php [L]
RewriteRule ^userpanel$ /userpanel.php [L]
RewriteRule ^userpanel/$ /userpanel.php [L]
RewriteRule ^forgot_password$ /forgot_password.php [L]
RewriteRule ^forgot_password/$ /forgot_password.php [L]
RewriteRule ^feedback$ /feedback.php [L]
RewriteRule ^feedback/$ /feedback.php [L]
RewriteRule ^about_us$ /about.php [L]
RewriteRule ^about_us/$ /about.php [L]
RewriteRule ^articles$ /articles.php?page=1 [L]
RewriteRule ^articles/$ /articles.php?page=1 [L]
RewriteRule ^articles/page$ /articles.php?page=1 [L]
RewriteRule ^articles/page/$ /articles.php?page=1 [L]
RewriteRule ^articles/page/([0-9]+)/? /articles.php?page=$1 [L]
RewriteRule ^articles/topic/(.*)/? /view_article.php?id=$1 [L]
RewriteRule ^cart$ /cart.php [L]
RewriteRule ^cart/$ /cart.php [L]
RewriteRule ^catalog$ /catalog.php?page=1 [L]
RewriteRule ^catalog/$ /catalog.php?page=1 [L]
RewriteRule ^catalog/page$ /catalog.php?page=1 [L]
RewriteRule ^catalog/page/$ /catalog.php?page=1 [L]
RewriteRule ^catalog/page/([0-9]+)/? /catalog.php?page=$1 [L]
RewriteRule ^catalog/category/(.*)/page/([0-9]+)/? /catalog_by_cats.php?cat=$1&page=$2 [L]
RewriteRule ^catalog/category/(.*)? /catalog_by_cats.php?cat=$1&page=1 [L]
RewriteRule ^catalog/subcategory/(.*)/page/([0-9]+)/? /catalog_by_subcats.php?cat=$1&page=$2 [L]
RewriteRule ^catalog/subcategory/(.*)? /catalog_by_subcats.php?cat=$1&page=1 [L]
RewriteRule ^catalog/view/(.*)/? /view_item.php?id=$1 [L]
RewriteRule ^catalog/view_all/(.*)/view/(.*)/? /view_all.php?type=$1&cat=$2 [L]
RewriteRule ^catalog/view_all/(.*)? /view_all.php?type=all&cat=0 [L]
RewriteRule ^contacts$ /contacts.php [L]
RewriteRule ^contacts/$ /contacts.php [L]
RewriteRule ^our_works$ /faq.php [L]
RewriteRule ^our_works/$ /faq.php [L]
RewriteRule ^news$ /news.php?page=1 [L]
RewriteRule ^news/$ /news.php?page=1 [L]
RewriteRule ^news/page$ /news.php?page=1 [L]
RewriteRule ^news/page/$ /news.php?page=1 [L]
RewriteRule ^news/page/([0-9]+)/? /news.php?page=$1 [L]
RewriteRule ^news/topic/(.*)/? /view_news.php?id=$1 [L]
RewriteRule ^pay$ /pay.php [L]
RewriteRule ^pay/$ /pay.php [L]
RewriteRule ^producers/(.*)/page/([0-9]+)/? /producers.php?id=$1&page=$2 [L]
RewriteRule ^producers/(.*)? /producers.php?id=$1&page=1 [L]
RewriteRule ^producers$ /producers.php [L]
RewriteRule ^producers/$ /producers.php [L]
RewriteRule ^reviews$ /reviews.php [L]
RewriteRule ^reviews/$ /reviews.php [L]
RewriteRule ^search/(.*)/? /search.php?word=$1 [L]
RewriteRule ^services$ /services.php [L]
RewriteRule ^services/$ /services.php [L]
RewriteRule ^thanks$ /thanks.php [L]
RewriteRule ^thanks/$ /thanks.php [L]
RewriteCond %{HTTP_HOST} ^www.mir-gardin.com.ua$ [NC]
RewriteRule ^(.*)$ http://mir-gardin.com.ua/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://mir-gardin.com.ua/ [R=301,L]
web-optimizator.com
Permanent Redirect 301 для apache (.htaccess)
Вставлять правила нужно сразу после строк:
RewriteEngine On RewriteBase / # чтобы обрезать полный путь, от корня сервера до корня сайта
сами правила задаются при помощи регулярных выражений, напомним синтаксис:
- Метасимволы, для задания групп символов или «меток» в шаблоне:
- ^ — метка начала строки,
- $ — метка конца строки,
- ! — отрицание,
- — экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,
- . — точка, обозначает любой символ, но только один,
- () — группировка.
- Модификаторы, ставятся после обычных символов, метасимволов или их групп:
- ? — символ повторяется 0 или 1 раз,
- * — повторяется от 0 до 65536 раз,
- + — повторяется от 1 до 65536 раз.
- Флаги, определяют дополнительные опции для данного правила:
- NC — (nocase) отключает проверку регистра символов.
- R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY).
С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY). Как вы понимаете, это то самое, что нам и надо. - L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.
Рассмотри наиболее часто встречаемые ситуации:
Редирект с www.site.ru на site.ru
RewriteCond %{HTTP_HOST} ^www.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Редирект для с site.ru на www.site.ru
RewriteCond %{HTTP_HOST} ^www.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond обозначаем условие, при совпадении с которым будет выполнено правило RewriteRule.
Редирект с index.php (html) на главную страницу
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.(php|html|htm) HTTP/ RewriteRule ^(.*)index.(php|html|htm)$ $1 [R=301,L]
Смотрите также более подробно статью: Как сделать редирект на php.
Редирект при смене структуры сайта
RewriteRule ^post/category/(.*)$ blog/category/$1 [R=301,L] RewriteRule ^post/(.*)$ blog/post/$1 [R=301,L]
Permanent Redirect 301 на PHP
Чтобы сообщить браузеру о том, что с запрошенной им страницы нужно произвести редирект на адрес http://site.ru выполните команды:
header("HTTP/1.1 301 Moved Permanently"); header("Location: http://site.ru"); exit();
Permanent Redirect 301 для nginx
Правила редиректа описывается в секции server.
Редирект с www.site.ru на site.ru
server { listen 80; server_name www.site.ru; rewrite ^ http://site.ru$request_uri? permanent; }
или общее правило для всех сайтов:
server { server_name ~^(?! www.); rewrite ^ http://www.$host$request_uri permanent; }
Редирект для с site.ru на www.site.ru
server { listen 80; server_name site.ru; rewrite ^ http://www.site.ru$request_uri? permanent; }
Редирект с index.php на главную страницу
location = /index.php { if ($request_uri = /index.php) { rewrite ^ http://$host? permanent;#301 redirect } fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
itzx.ru
Много вопросов по редиректам, устроим мини-фак раз уж поиском не пользуетесь.
Для начала включаем SEF (ЧПУ) в глобальных настройках и Перенаправление URL, далее файл htaccess.txt, который лежит в корне (увидите его когда по FTP зайдете), переименовываем в .htaccess (точка в начале), как раз в нем и будет работать.
Пояснение: 301 редирект (постоянное перенаправление с одного адреса на другой) используют для склейки url адресов, если страница изменила свой адрес или у одного документа имеется полный дубль по другому адресу.
Примеры:
1. У главной страницы сайта site.ru всегда присутствует полный ее дубль по адресу site.ru/index.php
Используем код для перенаправления:
или
2. Если у вашего сайта несколько имен, но вы хотите, чтобы пользователи всегда видели в адресной строке основное имя сайта, используйте следующие строки сразу после RewriteEngine On:
2.1 Редирект с www на без www
Вариант №2 (тоже самое только без указания домена, + редирект на https)
2.2 Редирект без www на www
3. 301 редирект на окончание .html (для тех у кого включен этот суффикс), перенаправит со страниц site.ru/article и site.ru/article/ на страницу site.ru/article.html
Или
4. Редирект с .html на без .html, т.е. с site.ru/article.html на site.ru/article (для тех кто сначала включил .html, а потом решил избавиться от него)
Или
5. Редирект для страниц с параметрами, например со страницы site.ru/blog?limitstart=0 на site.ru/blog
Редирект с ?limitstart=0 без указания категории:
6. И еще допустим поменяли структуру и нужно чтобы все страницы старого раздела перенаправлялись на те же страницы только нового раздела, например site.ru/blog/raznoe/article на site.ru/blog/article
7. 301 редирект с адреса без слеша на слеш, то есть с site.ru/article на site.ru/article/
8. Редирект со слеша на без слеша в конце, т.е. с site.ru/article/ на site.ru/article
еще вариант как избавиться от завершающего слеша на конце
вариант избавления от слэша для страниц с параметрами, на примере страниц с пагинацией site.ru/categoriya?start=5/
9. Сначала забыли включить SEO в глобальных настройках, а потом включили, как итог — в индексе много документов с /index.php в адресе. Избавиться можно так —
— по такому же принципу можно избавиться от какой либо вложенности, например редиректить с site.ru/ru/catalog на site.ru/catalog (/ru/ убирается)
10. Запрет доступа для плохих ботов
пример №1
пример №2
11. Редирект без указания домена (удобно при переносе сайта на другой домен)
12. Редирект на главную, если в ссылке несколько слешей(site.ru/catalog////article), от 2 до 14.
13. Перенаправление урл с id на БЕЗ id (при переходе на Joomla 3.8.0) для сохранения позиций — site.ru/38-article на site.ru/article
СИНТАКСИС РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ:
Если у вас есть чем дополнить пост, отписывайтесь в теме, потом сведем в шапку и закроем.
———————————————————————————————-
Обратите внимание!
Любое изменение в .htaccess вы должны тестировать и проверять — все ли у вас работает на сайте, например, могут возникнуть проблемы с различными формами — авторизация, отправка сообщениякомментария и т.д., особенно при перенаправлениях с адреса без слеш на конце НА слеш или с адреса без .html НА .html в конце! Будьте внимательны.
———————————————————————————————-
PS: Просьба вопросы здесь не задавать, постим только готовые решения!
Если у вас вопрос, который не освещен в данном FAQ'е, — создайте отдельную тему!
Когда вы решите проблему, пожалуйста, запостите сюда свое решение, если оно связано с .htaccess
———————————————————————————————-
joomlaforum.ru
Полезные советы
- Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
- Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы — вес исходной страницы может не передаться.
- При составлении файла .htaccess простые директивы должны идти раньше сложных, которые распространяются на весь сайт. Такая компоновка будет более удобной при работе с файлом и поможет избежать путаницы.
Наиболее популярные правила
Приведенные примеры работают для серверов функционирующих на APACHE, для NGINX настройки в файле .htaccess работать не будут. В примерах используется %{QUERY} — так обозначается часть URL, которая следует после знака вопроса. Правила для редиректа срабатывают только при условии соответствия правилу указанному в редиректе.
При настройке правила редиректов в файле .htaccess все правила необходимо указывать после указанных двух строк, либо просто добавьте их:
Options +FollowSymLinks
RewriteEngine On
301 редирект все страниц без WWW на страницы с WWW
RewriteCond %{HTTP_HOST} ^mysite.ru$ [NC]
RewriteRule ^(.*)$ http://www.mysite.ru/$1 [R=301,L]
Обратный редирект со страниц с WWW на страницы без WWW
RewriteCond %{HTTP_HOST} ^www.mysite.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
301 редирект с одной страницы на другую
Redirect 301 /oldpage.html http://mysite.ru/newpage.html
Переадресация для разделов через RewriteRule
RewriteRule ^papka /papka-new/$1 [R=301,L]
301 редирект для страниц имеющих Get-параметры в URL
Для наглядности примера допустим адрес страницы имеет вид http://mysite.ru/catalog/index.php?IBLOCK_ID=5&SECTION_ID=15. Следующее правило будет делать переадресацию:
RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=15$ [NC]
RewriteRule ^catalog/index.php$ /newcatalog/? [R=301,L]
Иногда необходимо настроить редирект для изменяющихся Get-параметров, например в текущем примере динамическим параметром будет SECTION_ID:
RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=(.*)$ [NC]
RewriteRule ^catalog/index.php$ /newcatalog/? [R=301,L]
Переадресация со страниц без значения Get-параметра
Например адрес страницы имеет вид — http://mysite.ru/?addon, тогда редирект будет следующим:
RewriteCond %{QUERY} ^addon$ [NC]
RewriteRule ^$ /? [R=301,L]
Переадресация одного адреса, без вложенных адресов
Например довольно часто необходимо настроить переадресацию со страницы раздела http:/site.ru/razdel/, однако прочие страницы в данном разделе должны работать без редиректа, например страница http://mysite.ru/razdel/section.php?SECTION_ID=1. Для этого нужно добавить всего один символ — $.
RewriteRule ^razdel/$ http://mysite.ru/new-razdel/ [R=301,L]
Настройка кириллических доменов .РФ
Правила и логика работы с доменами на кириллице абсолютно такие же, единственным отличием является замена символов кириллицы на специальный код.
301 редирект с одного домена на другой
RewriteCond %{HTTP_HOST} ^oldmysite.ru$ [NC]
RewriteRule ^(.*)$ http://newmysite.ru/$1 [R=301,L]
Правило для доменов .РФ
RewriteCond %{HTTP_HOST} ^xn-....xn--p1ai$ [NC] RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
Редирект на папки со слешем на конце
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mysite.ru/$1/ [L,R=301]
Редирект на папку без слеша — убираем слеш на конце
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
Переадресация с домена в папку другого сайта
RewriteCond %{HTTP_HOST} ^oldsite.ru$ [NC]
RewriteRule ^(.*)$ http://newsite.ru/oldsite/ [R=301,L]
Редирект со всех страниц кроме определенной папки
Для примера возьмем в исключение папку панели администратора в CMS Bitrix
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://mysite.ru/ [L,R=301]
Переадресация всех файлов папки на конкретный файл
RewriteRule ^papka(.*)$ /my-file.html [L,R=301]
Переадресация файлов папки на другой файл с исключением
RewriteRule ^papka/file.html /new-file.html [L,R=301]
RewriteRule ^papka(.*)$ /my-file.html [L,R=301]
Редирект замены расширений файлов — с html на php
RedirectMatch 301 (.*).html$ http://newsite.ru$1.php
Указываем порядок загрузки индексных файлов в корне
DirectoryIndex index.php index.html index.htm index.shtml
Редирект с index.php на корень сайта
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/ RewriteRule ^index.php$ http://mysite.ru/ [R=301,L]
Редирект всех индексных страниц на корень
RewriteRule ^(.*)index.php$ http://mysite.ru/$1 [R=301,L]
Переадресация с поддомена на основной домен
RewriteCond %{HTTP_HOST} ^abc.mysite.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru%{REQUEST_URI} [R=301,NC,L,QSA]
Редирект страницы из различных директорий
Если в разных папках сайта лежит файл с одинаковым названием, то настроить переадресацию этих файлов на один.
RewriteRule [^abc]/nash-file.php /nash-file.php [R=301,L]
Создаем ЧПУ-копию динамических страниц
Для страницы появится обычный URL без передачи Get-параметров.
RewriteRule ^catalog/okno/?$ /firma/okna/detail.php?ID=123 [NC,L]
Переадресация с https на http
Необходимое правило для решения проблемы с дублями страниц в поисковых системах.
RewriteCond %{HTTPS} "on" RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
Настройка ответа 403 для спама по REFERER
Данное правило позволяет не пускать на сайт спамный трафик с других сайтов:
RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR]
RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]
RewriteRule .* - [F]
Обработка ошибки 404 в .htaccess
Для поисковых систем очень важно получать код ответа 404 для несуществующих страниц
ErrorDocument 404 /404-for-me.php
Особенности настройки
Следует помнить, что все правила выполняются в .htaccess в порядке следования их в файле, поэтому необходимо следить за очередностью правил.
Избегайте цепочек редиректов, когда от старой до новой страницы осуществляется посещение еще одной страницы. Цепочки переадресаций негативно влияют на доверие пользователей и поисковых систем.
Включение редиректа для определенных User Agent
Например редирект на мобильную версию для планшетов и смартфонов:
RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series 60|symbos|windows mobile|windows ce|ppc|smartphone|blackberry|mtk|bada|windows phone) [NC]
RewriteRule (.*) http://m.mysite.ru/ [L,R=301]
Настройка редиректов для всех поисковых роботов
RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo! slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC]
RewriteRule (.*) http://no-rank-site.ru/ [L,R=301]
Синтаксис и символы
- . — Точка означает любой символ.
- [abc] — перечень символов, совпадающих с буквами a, b, или с.
- [^abc] — перечень символов, не входящих в диапазон. Условию соответствует любой символ, кроме a, b, с.
- * — предыдущий символ может повторяться 0 и более раз.
- [abc]* — найти символы из заданного набора идущие подряд.
- [^abc]* — обратная операция.
- .* — замена любого набора символов. «.*» — найти все подстроки между кавычками.
- ^ — обознает начало строки (при использовании в начале выражения).
- $ — конец строки.
- w — буква, цифра или подчёркивание _.
- d — любая цифра.
- D — любой символ, кроме цифр.
- [0-9] — указание на любую цифру.
- [a-z] — указание на любую букву от a до z с нижним регистром.
- [A-Z] — указание на любую букву от A до Z с верхним регистром.
- [a-zA-Z] — любая буква от a до Z, регистр не важен.
- [a-Z] — тоже самое, только короче.
Флаги для доп. опций
- NC — NoCase отключает проверку регистра символов при срабатывании правила.
- R — Redirect останавливает изменение URL-адреса и возвращает результат. Самое популярное значение R=301, однако встречаются и другие для временных редиректов (302, MOVED TEMPORARY).
- L — Last останавливает создание URL-адреса и строка считается окончательной.
canwas.ru