301 редиректы на домены в htaccess
Введение.
Правила приведены для сервера Apache. В правилах: %{QUERY_STRING} — обозначает фрагмент URL-адреса после знака вопроса (задания значений CGI-параметров). Срабатывание того или иного правила для редиректа определяется тем, попадает URL-адрес страницы под это правило или нет. О значении тех или иных обозначений (^, $, NC и т.д.) см. памятку в конце страницы.
Проверка кода ответа. Быстрая и бесплатная проверка кодов ответа для списка URL в режиме онлайн реализована в рамках комплекса инструментов «Пиксель Тулс», предусмотрено удобное цветовое кодирование и загрузка URL файлом.
Анализ проведён с помощью инструментов в сервисе Пиксель Тулс.
Ниже даны наиболее используемые правила настройки файла .htaccess для 301-редиректа. Лучше размещать все правила после двух строк:
Options +FollowSymLinks
RewriteEngine On
# Текстовый комментарий, данная строчка не будет обрабатываться.
RewriteCond %{HTTP_HOST} ^site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Для HTTPS-версии:
RewriteCond %{SERVER_PORT} ^80$ [OR] RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://pixelplus.ru/$1 [R=301,L]
Redirect 301 /was.php http://www.site.ru/new.php
При этом, новый адрес указывать необходимо полностью с http и доменным именем.
RewriteRule ^dir /dir-new/$1 [R=301,L]
Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:
RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ [NC] RewriteRule ^dir/index.php$ /new/sef/? [R=301,L]
Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:
RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ [NC] RewriteRule ^dir/index.php$ /new/sef/? [R=301,L]
Если адрес имеет следующий вид: http://www.site.ru/?abc то для перенаправления подойдет последовательность строчек:
RewriteCond %{QUERY_STRING} ^abc$ [NC]
RewriteRule ^$ /? [R=301,L]
Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/, но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.
RewriteRule ^dir/$ http://www.site.ru/new-dir/ [R=301,L]
Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф преобразуется в .xn--p1ai.
RewriteCond %{HTTP_HOST} ^old-site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
И для домена в зоне РФ:
RewriteCond %{HTTP_HOST} ^xn-….xn--p1ai$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^si-te.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301] RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]
RewriteRule ^dir(.*)$ /new-file.php [L,R=301]
RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301] RewriteRule ^dir(.*)$ /all.php [L,R=301]
RedirectMatch 301 (.*).html$ http://www.new-site.ru$1.php
RewriteRule ^img/(.+).jpg$ http://img.domain.ru/$1.jpg [R=301,L]
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
DirectoryIndex index.html index.php index.htm index.shtml
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://www.site.ru/ [R=301,L]
Для всех индексных страниц на сайте:
RewriteRule ^(.*)index.php$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} [R=301,NC,L,QSA]
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]
Код позволяет поставить 301-редирект со всех папок вида http://site.ru/***/uniqe-file.html на один файл в корне /unique-file.html. Бывает полезен при переделке сайта и изменении ссылок.
RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]
Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/
RewriteCond %{HTTPS} «on»
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.
RewriteCond %{SERVER_PORT} ^80$ [OR] RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR] RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC] RewriteRule .* — [F]
Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP_REFERER.
Внимание, важно чтобы код ответа сервера для 404 ошибки был именно 404. Путь к файлу указывается с помощью следующей строчки:
ErrorDocument 404 /404-for-me.php
! Все правила выполняются в прямом порядке их следования в файле .htaccess и правило, написанное позже, и будет выполняться позже.
! Для сайтов, на которых используется не сервер Apache, аналогичные 301-редиректы легко настраиваются с помощью PHP.
<?php
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: http://www.site.ru/dir/»);
exit();
?>
! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.
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://mobile.site.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-search.site.ru/ [L,R=301]
Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/
RewriteCond %{QUERY_STRING} ^view=featured$ [NC] RewriteRule ^component/content/$ /? [R=301,L]
Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/
RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC] RewriteRule ^index.php$ /? [R=301,L]
. — Точка заменяет произвольный символ.
[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] — то же самое.
RewriteRule (.*) $1? [R=301,L] Располагать после: RewriteBase /
Памятка по используемым символам и обозначениям
Содержание
- 1 Памятка по используемым символам и обозначениям
- 2 В каких случаях может пригодится 301 редирект (PermamentRedirect)
- 3 Настройка 301 редиректа в файле .htaccess при помощи директив
- 4 301 редирект через скрипт путем передачи заголовков
- 5 Несколько полезных советов, связанных с настройкой редиректа
- 6 Как настроить 301 редирект в htaccess
- 7 Примеры использования 301 редиректа
- 8 Правильный 301 редирект на новый домен
- 9 Полезные советы
- 10 Наиболее популярные правила
- 10.1 301 редирект все страниц без WWW на страницы с WWW
- 10.2 Обратный редирект со страниц с WWW на страницы без WWW
- 10.3 301 редирект с одной страницы на другую
- 10.4 Переадресация для разделов через RewriteRule
- 10.5 301 редирект для страниц имеющих Get-параметры в URL
- 10.6 Переадресация со страниц без значения Get-параметра
- 10.7 Переадресация одного адреса, без вложенных адресов
- 11 Настройка кириллических доменов .РФ
- 11.1 301 редирект с одного домена на другой
- 11.2 Редирект на папки со слешем на конце
- 11.3 Редирект на папку без слеша — убираем слеш на конце
- 11.4 Переадресация с домена в папку другого сайта
- 11.5 Редирект со всех страниц кроме определенной папки
- 11.6 Переадресация всех файлов папки на конкретный файл
- 11.7 Переадресация файлов папки на другой файл с исключением
- 11.8 Редирект замены расширений файлов — с html на php
- 11.9 Указываем порядок загрузки индексных файлов в корне
- 11.10 Редирект с index.php на корень сайта
- 11.11 Редирект всех индексных страниц на корень
- 11.12 Переадресация с поддомена на основной домен
- 11.13 Редирект страницы из различных директорий
- 11.14 Создаем ЧПУ-копию динамических страниц
- 11.15 Переадресация с https на http
- 11.16 Настройка ответа 403 для спама по REFERER
- 11.17 Обработка ошибки 404 в .htaccess
- 12 Особенности настройки
- 13 Синтаксис и символы
- 14 Виды редиректов через файл htaccess
- 15 Что такое перенаправление 301?
- 16 Инструмент для 301 редиректа — файл .htaccess
- 17 Процедура создания файла .htaccess
- 18 Самый популярный случай, когда может пригодиться 301 редирект
- 19 Значение настройки зеркал сайта
- 20 Последствия неправильной настройки зеркал
- 21 Редирект с домена www на название сайта без префикса и наоборот
- 22 Переход с одного домена интернет-проекта на другой
- 23 Смена ссылок ЧПУ и редирект при этом
- 24 Перенаправление при смене расширения файла
- 25 Редирект при партнёрских программах
- 26 Как произвести редирект 301 в CMS Joomla
- 27 Редирект с помощью PHP
Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.
- ^ — спецсимвол начала строки;
- $ — спецсимвол конца строки;
- ! — спецсимвол отрицания;
- . — точка, заменяет любой символ, но только один;
- () — группировка;
- — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом;
- # — начало текстового комментария в файле.
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
- ? — символ повторяется 0 или 1 раз.
- + — повторяется от 1 до 65536 раз.
- * — повторяется от 0 до 65536 раз.
Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
- NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
- R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
- L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.
pixelplus.ru
В каких случаях может пригодится 301 редирект (PermamentRedirect)
Можно перечислить огромное множество ситуаций, когда веб-мастеру пригодится использовать перенаправление 301. Среди наиболее распространенных случаев можно выделить следующие:
1. При переносе сайта на другую CMS;
2. При смене доменного имени сайта, при помощи 301 редиректа можно сохранить все имеющиеся показатели старого домена и перенести их на новый. При этом как поисковые системы так и пользователи будут автоматически перенаправляться к новому домену.
3. Если склеиваются домены без www с www. При этом также все показатели этих этих копий сайтов будут совмещаться.
4. В случае переноса страницы внутри сайта на новый URL
В Яндекс и Google редирект 301, как правило, передает:
- Ссылочный вес
- ТИЦ сайта и PR страниц
Однако есть вещи, которые редиректом не передаются на новый URL-адрес, к ним относятся:
- Санкции, которые были наложены на домен сайта
- Возраст(если был изменен домен). Тем не менее, если редирект был настроен в пределах одного доменного имени, с одной страницы на другую, то данный показатель передается.
Когда редирект будет установлен, пользователи будут перенаправляться со старого URL-адреса на новый. При последующем посещении об этом узнают поисковые роботы. Они получают сигнал, в котором указывается новый адрес страницы, теперь является основным. На него «перетекают» все основные показатели.
Темы касающиеся редиректа, являются очень актуальными и часто подымаются на тематических форумах иногда там создаются целые разделы, посвященные им.
Далее мы рассмотрим как настроить 301 редирект и приведем ряд готовых, рабочих решений, которые могут пригодится в том или ином случае.
Настройка 301 редиректа в файле .htaccess при помощи директив
Возможность настройки 301 перенаправления именно через файл htaccess будет зависеть от того какой веб сервер используется на вашем виртуальном хостинге или виртуальном сервере. В большинстве случаев это веб сервер Apache и вот именно он и позволяет производить настройку редиректа через htaccess.
Единственным условием является наличие включенных модулей mod_alias и/или mod_rewrite в файле php.ini. Они включены на большинстве хостингов поэтому можете смело приступать к настройкам.
Файл .htaccess находится в корневой папке вашего сайта. На сегодняшний день он имеется практически у всех современных CMS. Если в вашем случае его нет, то просто создайте текстовый документ и измените его расширение и название на .htaccess (точка впереди обязательна). После этого вы можете прописывать в него приведенные ниже примеры для создания того или иного редиректа. Подробнее о .htaccess читайте в материале — «Файл htaccess — настройка и примеры использования».
При использовании, примеров кода «vash-sait.ru» замените на доменное имя вашего сайта.
Редирект при помощи mod_rewrite и директивы RewriteRule
Чтобы использовать директиву RewriteRule на хостинге должен быть подключен модуль mod_rewrite и включена опция FollowSymLinks включена, а в файле httpd.conf. Многие не подозревают, но с данным модулем приходится сталкиваться чаще, чем можно себе представить, например при использовании ЧПУ ссылок в CMS Joomla или WordPress.
Для настройки перенаправлений в файле htaccess, вам могут пригодится следующие операторы регулярных выражений:
- . — любой символ
- $ — ограничение справа
- ^ — ограничение слева
- — 0 и более символов
- + — 1 и более символов
- [] — диапазон значений
- — экранирование
- () — переменная
1. Перенаправление домена с www на без-www
Очень часто 301 редирект используется, для склеивания адресов сайта с www и без них. Раньше поисковые системы воспринимали это как совершенно разные сайты, сейчас они научились определять зеркала сайта, но лучше указать им на правильное зеркало, чтобы не было путаницы ни у вас ни у них.
Несмотря на то, что www все еще встречается в адресах некоторых сайтов, если веб-ресурс создается с самого начала, то лучше не использовать www в адресе сайта и произвести соответствующее перенаправление.
Но если вы работаете со старым сайтом, который уже проиндексирован в поисковой системе, то необходимо смотреть какого вида URL — ы идут на сайт из поисковой выдачи и на таком варианте остановится. Чтобы не делать никаких резких кардинальных движений.
Но мне нравится другой, более понятный синтаксис:
2. Редирект домена без www на домен с www.
Или, по типу первого, альтернативный вариант
3. Перенаправление страницы с ЧПУ URL -ом на другую страницу с ЧПУ URL -ом
Сегодня многие CMS позволяют использовать ЧПУ ссылки и часто в виду определенных обстоятельств приходится менять один адрес страницы на другой. Ниже приведен вариант редиректа страницы http://vash-sait.ru/optimizatsiya-stranitsy.html на страницу http://vash-sait.ru/seo-optimizatsiya-stranitsy.html.
4. Перенаправление старого домена на новый.
В некоторых случаях требуется сменить один домен сайта на другой. В таком случае нужно установить 301 перенаправление со старого домена на новый. Прописать представленный ниже код нужно в файле .htaccess старого сайта.
В приведенном примере старый домен с www и без www будет перенаправлен на новый домен без www.
5. Редирект домена алиаса на основной домен
Иногда для сайта используется не один, а несколько доменов т. е. используются так называемые алиасы или синонимы домена. Для этого домены могут регистрироваться в нескольких зонах vash-sait.ru, vash-sait.com и прилинковываться к одной директории сайта на хостинге. В этом случае будут 2 или более точных копии сайта с одним и тем же фалом .htaccess.
И так как это очень плохо с позиции SEO оптимизации, то необходимо выбрать какой то основной домен и сделать на его редирект. Например если основной домен vash-sait.ru, то сделать, на него редирект с vash-sait.com и www.vash-sait.com можно следующим образом:
6. Редирект страниц с расширением .htm на страницы с раcширением .html
В некоторых случаях это может служить предотвращением появления в индексе дублей страниц с расширением .htm.
7. Редирект страницы vash-sait.ru/index.php на vash-sait.ru
Таким образом можно убрать дубли главной страницы такого типа, которые могут появится в некоторых случаях в индексе.
Если нужно склеить дубли вида vash-sait.ru/home.html на vash-sait.ru
8. Редирект URL -ла с параметром на любую другую страницу сайта.
Если URL -лы страниц вашего сайта содержат параметры, то при необходимости можно произвести редирект страницы с определенным параметром на любую другую страницу. Например страницы http://vash-sait.ru/index.php?section=1 на с страницу http://vash-sait.ru/index.php?section=2 Параметр в URL идет, как правило, после «?» в данном случае это section=1, сам код будет таким:
Кроме этого URL с параметром можно перенаправить на главную страницу сайта следующим образом:
Редирект при помощи директив Redirect или RedirectPermanent модуля mod_alias
Директива Redirect осуществляет простой редирект посетителя и поискового робота на новый URL.
Синтаксис данной директивы следующий: Redirect [status] URL-path URL.
Условные обозначения:
- URL – новый адрес веб-документа или страницы
- URL-path – старый адрес запрашиваемого документа
- Status – код возврата, однако является необязательным полем и может отсутствовать. Допустимыми значениями являются: 301 – постоянный перенос, 302 – временный перенос, 410 или gone – удален, 303 или seeother – смотрите другой.
Прописывается директива все в том же файле .htaccess.
1. Редирект с одной страницы на другую
Очень простой способ недостатком которого является лишь то, что если нужно перенаправить много страниц, для каждой отдельной страницы нужно создавать данную строчку кода.
2. Редирект старого домена на новый
Для этого в файле .htaccess старого домена пропишите следующее:
3. Переадресация каталога
Redirect permanent — это деректива оворящая, что страница перемещена.
Синтаксис:
Redirect permanent URL-path URL
URL-path: локальная часть URL документа с которого должен быть произведен редирект.
URL: URL куда должен быть выполнен редирект.
Записывается все по аналогии с директивой Redirect, но код возврата указывать уже не нужно. Для редиректа одной страницы на другую записывается так:
301 редирект через скрипт путем передачи заголовков
Вся работа 301 перенаправления через скрипты PHP, ASP, JavaScript заключается в передаче клиенту, т. е. браузеру или поисковому роботу определенных заголовков:
Приведем примеры редиректа для разных скриптов
1. 301 редирект на PHP.
Этот код лучше всего помещать в самое начало скрипта PHP файла. Вместо http://vash-sait.ru/novaya-stranitsa.html нужно указать адрес страницы куда должен быть перенаправлен пользователь или поисковый бот.
2. Редирект на ASP
3. Редирект ASP.NET
4. Для Ruby on Rails
5. Для JSP (Java)
6. Для CGI PERL
7. ColdFusion редирект
Несколько полезных советов, связанных с настройкой редиректа
1. Использовать описанные выше методы можно лишь в том случае, если ресурс расположен на Linux-сервере и использует Apache. При этом обязательно должны быть подключены модули mod_rewrite и mod_alias.
2. Вместо файла .htaccess есть еще один способ настройки 301 перенаправления — внесение изменений в файл hpptd.conf, это немного более эффективно так как использование файла .htaccess создает небольшую дополнительную нагрузку на сервер.
3. Если работа редиректа некорректна, необходимо убедиться, что в других файлах нигде не прописан другой редирект, так как их конфликт может стать причиной большого числа непредвиденных проблем.
4. Прежде чем настроить 301 -й редирект рекомендуется ознакомиться с официальной документацией, в которой прописаны синтаксис и основные правила. Но при желании, можно поэкспериментировать, перебрать несколько возможных вариантов и как говорится «методом тыка» добиться нужного результата.
5. Настроив редирект, необходимо проверить, все ли работает. Нужно посетить главную страницу сайта, побегать по разделам, различным страницам, чтобы быть уверенным, что у пользователя не возникнет никаких проблем.
webmastermix.ru
Как настроить 301 редирект в htaccess
Файл под названием .htaccess находится в главной категории вашего сайта. Это служебный файл, в котором мы будем указывать правила склейки. Открываем файл блокнотом (рекомендую notepad++, чтобы не было проблем с кодировкой). Не забывайте, что это один из важных пунктов в работе SEO специалиста.
Общий шаблон для .htaccess, которым мы будем пользоваться:
Options +FollowSymLinks RewriteEngine On #Здесь указываем правила
Все правила записываются в виде:
RewriteCond [Сравнение] [Условие] [Флаги] RewriteCond [Сравнение] [Условие] [Флаги] RewriteRule [Шаблон] [Подстановка] [Флаги]
Теперь непосредственно займемся переадресацией и разберем конкретные примеры.
Я уже писал статью про склейку зеркал сайта, но на всякий случай здесь обобщу, чтобы вам было удобнее пользоваться страницей.
Примеры использования 301 редиректа
Редирект с index.php на главную
Чтобы настроить его вам нужно прописать в вашем файле следующий код, который будет перенаправлять посетителей с адреса site.ru/index.php на site.ru:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP RewriteRule ^index.php$ http://site.ru/ [R=301,L]
Если вам так же нужно сделать переадресацию с index.html, то просто в коде выше замените .php на .html
Склеиваем алиасы сайта
Если у вас несколько доменов и вы хотите все их перенаправлять на основной сайт, то используем:
RewriteCond %{HTTP_HOST} ^vash-sait.com$ [OR,NC] RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ [NC] RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ http://vash-sait.ru/$1 [R=301,L]
Обратите внимание на первые 2 строки, там указано зеркало в зоне .com, если у вас иная или несколько зон, то добавляем правила.
Редирект с www на без www
Этот способ я уже описывал ранее, но повторюсь. Для того, чтобы склеить зеркала и выбрать основным домен без www прописываем:
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Редирект с домена без www на домен с www
Это действие противоположное предыдущему, только основное зеркало здесь www.site.ru:
RewriteCond %{HTTP_HOST} ^site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
301 редирект страниц со слэшем и без
Это еще один вид дублей, тут мы склеим страницы site.ru/category/ и site.ru/category, как видите, в конце второго урла не стоит слэша:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1 [R=301,L]
Если вам нужно наоборот оставить слэш в конце урла, то вам нужен данный вариант:
RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Если у вас по какой-то причине появились урлы типа site.ru/category//article.html, то юзаем код:
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 [R=301,L]
где, «//» можно заменить на «—» или любые сдвоенные символы в урле.
Массовая замена категории
Бывает, что вы переименовали категорию, а за ней закреплены тысячи урлов. Чтобы не состарится во время написания тысяч одинаковых перенаправлений юзаем:
RewriteRule ^(.*)/old-category/(.*)$ $1/new-category/$2 [R=301,L]
Если у вас категория идет сразу после домена (типа site.ru/category/), то используем другой вариант:
RewriteRule old-category /(.*) / old-category /$1 [R=301,L]
Редирект на новую страницу
Самый простой редирект со страницы на страницу, для это просто пропишите так:
Redirect 301 /old-post.html http://new-site.ru/new-post.html
Где old-post.html — это ваша старая страница, а new-site.ru/new-post.html — это новая страница и она может быть на любом домене (включая ваш текущий домен).
Редирект для url с параметрами
Страницы с параметрами редиректятся сложнее, возьмем пример http://site.ru/page.php?sort=articles. Параметр здесь «sort=articles». Код будет следующим:
RewriteCond %{QUERY_STRING} sort=articles RewriteRule .* http://site.ru/page.php? [R=301,L]
Работаем с расширениями
Убираем .html из url (для удаления .php не забудьте заменить $1.html на $1.php):
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.html [L]
Меняем .php на .html в урлах и наоборот (не забываем поменять местами в коде):
RedirectMatch 301 (.*).php$ http://www.site.com$1.html
Правильный 301 редирект на новый домен
Этот пункт я выделил отдельно, т.к. он больше связан с переносом на другой домен. Тут есть важный момент, это не упустить директиву по правке роботса — она указана на 3 строке кода.
RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC] RewriteRule ^([^/]+) $1 [L] RewriteCond %{HTTP_HOST} ^site.ru RewriteRule ^(.*)$ http://new-site.ru/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^www.site.ru RewriteRule ^(.*)$ http://new-site.ru/$1 [R=301,L]
С помощью таких не хитрых махинаций мы избавимся от дублей страниц, тем самым улучшив нашу внутреннюю оптимизацию и соответственно качество сайта.
Если у вас появились какие-то вопросы, пишите в комментарии — будем разбираться 🙂
romanus.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
Правила приведены для сервера Apache. В правилах: %{QUERY_STRING}
— обозначает фрагмент URL-адреса после знака вопроса (задания значений CGI-параметров). Срабатывание того или иного правила для редиректа определяется тем, попадает URL-адрес страницы под это правило или нет. О значении тех или иных обозначений (^, $, NC и т.д.) см. памятку в конце страницы.
Ниже даны наиболее используемые правила настройки файла .htaccess для 301 редиректа. Лучше размещать все правила после двух строк:
Options +FollowSymLinks RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Redirect 301 /was.php http://www.site.ru/new.php
При этом, новый адрес указывать необходимо полностью с http и доменным именем.
RewriteRule ^dir /dir-new/$1 [R=301,L]
Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111
, тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:
RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ [NC] RewriteRule ^dir/index.php$ /new/sef/? [R=301,L]
Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID
), можно использовать следующий код:
RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ [NC] RewriteRule ^dir/index.php$ /new/sef/? [R=301,L]
Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/
, но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1
открывалась по старому адресу, необходимо использовать спецсимвол $
в правиле.
RewriteRule ^dir/$ http://www.site.ru/new-dir/ [R=301,L]
Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф
преобразуется в .xn--p1ai
.
RewriteCond %{HTTP_HOST} ^old-site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
И для домена в зоне РФ:
RewriteCond %{HTTP_HOST} ^xn-....xn--p1ai$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^si-te.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301] RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]
RewriteRule ^dir(.*)$ /new-file.php [L,R=301]
RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301] RewriteRule ^dir(.*)$ /all.php [L,R=301]
RedirectMatch 301 (.*).html$ http://www.new-site.ru$1.php
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
DirectoryIndex index.html index.php index.htm index.shtml
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/ RewriteRule ^index.php$ http://www.site.ru/ [R=301,L]
RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} [R=301,NC,L,QSA]
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]
Код позволяет поставить 301-редирект со всех папок вида http://site.ruuniqe-file.html
на один файл в корне /unique-file.html
. Бывает полезен при переделке сайта и изменении ссылок.
RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]
Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11
по адресу /testovyi/test/
Внимание, важно, чтобы код ответа сервера для 404 ошибки, был именно 404. Путь к файлу указывается с помощью следующей строчки:
ErrorDocument 404 /404-for-me.php
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+).site.com$ RewriteRule ^(.*) http://site.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+).site.com$ RewriteCond %{HTTP_HOST} !=one.site.com [NC] RewriteRule ^(.*) http://site.com/$1 [R=301,L]
-
Если требуется настроить редирект только для некоторых 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://mobile.site.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-search.site.ru/ [L,R=301]
Переадресация с www.site.ru/component/content/?view=featured
на www.site.ru/
RewriteCond %{QUERY_STRING} ^view=featured$ [NC] RewriteRule ^component/content/?$ /? [R=301,L]
Переадресация с www.site.ru/index.php?idc=4&marea=6
на www.site.ru/
RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC] RewriteRule ^index.php$ /? [R=301,L]
. — Точка заменяет произвольный символ. [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] — то же самое.
RewriteRule (.*) $1? [R=301,L]
Располагать после: RewriteBase /
Памятка по используемым символам и обозначениям
Строчка RewriteCond
— условие выполнения правила RewriteRule
. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.
^ — спецсимвол начала строки;
$ — спецсимвол конца строки;
! — спецсимвол отрицания;
. — точка, заменяет любой символ, но только один;
() — группировка;
— «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
? — символ повторяется 0 или 1 раз.
+ — повторяется от 1 до 65536 раз.
* — повторяется от 0 до 65536 раз.
Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.
⇥ Полезные ссылки:
- Redirect 301 – теория и практика редиректа, настройка и правила использования
UPD:
RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
обратно:
RewriteCond %{SERVER_PORT} ^443$ [OR] RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://your_site.com/$1 [R=301,L]
⇥ Для WordPress:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] </IfModule> # END WordPress
Источник
coderhs.com
Виды редиректов через файл htaccess
Откройте файл htaccess (для сервера Apache), который располагается в корне вашего сайта (если такого файла нет, то создайте его).
В этом файле и будут проводится все дальнейшие настройки для правильной переадресации страниц и доменов сайта.
Для начала, давайте рассмотрим процесс указания главного зеркала сайта с приставкой www и без нее.
Перенаправление домена с www на без-www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC] RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Перенаправление домена без приставки www на www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Манипуляции со слешем в конце урла
Очень часто возникают ситуации, когда одна и та же страница на сайте, доступна по таким адресам:
http://site.ru/catalog/page
и
http://site.ru/catalog/page/
разница лишь в том, что в первом случае в конце нет слеша (косой линии), а во втором он присутствует. Это одна из самых грубых ошибок, ведь в таком случаи для каждой страницы будет создаваться дубль, и поисковые системы, будут считать эти адреса абсолютно разными, но с одинаковым содержимым.
Чтобы исключить такой вариант, и оставить урлы страниц без слеша в конце, вставьте вот такой код в файл htaccess:
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC] RewriteRule ^(.*)(/)$ $1 [L,R=301]
если вы хотите, чтобы слеш присутствовал в конце каждого урла используйте такой код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Отдельное перенаправление для дублей главной страницы
Бывают моменты, что главная страница вашего сайта, доступна по нескольким адресам – index.php, home.php, default.php и т.д. (окончание может быть и другое – html, htm и т.д.), что также создает дополнительные дубли, но только для главной страницы.
Для исправления этой ошибки, вставьте в уже известный вам файл, такой код:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^/]+/)*(default|index|main).(html|php|htm) HTTP/ [NC] RewriteRule ^(([^/]+/)*)(default|main|index).(html|php|htm)$ http://www.site.com/$1 [L,R=301]
301 редирект для переадресации страниц старого домена на новый
Redirect 301 / http://www.newsite.com/
В случаи применения этого правила все страницы старого сайта будут перенаправлены на новый домен.
Для переадресации конкретной страницы старого сайта на страницу нового сайта вставьте в файл .htaccess следующий код:
Redirect 301 /oldsite/page.html http://www.newsite.com/page2.html
Также можно воспользоваться альтернативным вариантом перенаправления всех страниц старого сайта на новый:
RedirectPermanent / http://www.newsite.com/
А вот код для перенаправления со старого каталога в новый:
RedirectPermanent /old-catalog http://www.newsite.com/new-catalog/
Перенаправление старого домена на новый:
RewriteEngine on
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
Есть случаи, когда необходимо, чтобы страница типа test.htm перенаправлялась на страницу test.html. Это решается вот таким кодом:
RewriteEngine on
RewriteBase /
RewriteRule ^test.htm$ test.html [R=permanent]
Если необходимо заменить все расширения на сайте, тогда редирект htaccess будет таким:
RewriteEngine on
RewriteBase /
RewriteRule ^(.*).htm$ $1.html [R=permanent]
Я привел лишь самые распространенные способы перенаправлений, которых для решения стандартных задач будет вполне достаточно. Если же вам нужно решить другие задачи, связанные с редиректом (помимо тех, что я описал в статье), советую обращаться к профессионалам, ведь привести сайт в нерабочее состояние, неправильными настройками в файле htaccess очень просто.
Хотя в принципе, базовые правила просты в понимании, и можно пробовать настраивать 301 редирект через htaccess под свои цели (если они не слишком сложные).
Поэтому всегда, после внесения изменений в этот файл, проверьте работу сайта – все ли открывается так как вам нужно, ничего не виснет, страницы и разделы сайта работают в нормальном режиме.
Проверку можно осуществить здесь. Интересуемая вас страница должна отдавать 301 ответ сервера.
Вот пример переадресации на моем блоге — к любому адресу размещенной статьи пропишите приставку feed/, после перехода вас попросту перекинет на тот же адрес. Таким образом, я борюсь с дублями страниц на блоге.
Сервисы генерации базовых редиректов:
http://www.webconfs.com/htaccess-redirect-generator.php
http://www.rapidtables.com/web/tools/redirect-generator.htm
Вот и все, о чем я хотел рассказать вам в сегодняшней статье. Если остались вопросы, обязательно задавайте их.
На этом все, всем пока!
www.seofive.ru
Что такое перенаправление 301?
Разберёмся во всём по порядку. Прежде всего дадим определение редиректу 301. Под ним понимают самое простое перенаправление гостя ресурса в сети Интернет (сайта) на другую страничку в сети либо доменное имя. Сразу оговоримся, что в данной статье не будут рассматриваться какие-либо хитрые скрипты и слишком сложный код, а будет показано несколько простых вариантов перенаправления, которые являются достаточными базовыми знаниями по этой теме для любого веб-мастера.
Инструмент для 301 редиректа — файл .htaccess
Рассмотрим такой удобный инструмент, как .htaccess. Редирект 301 через него делать весьма удобно и просто. Htaccess по своей сути является особенным служебным файлом в конфигурации, в котором заключён очень большой функционал и множество возможностей. При помощи его можно установить запрет на доступ к любым каталогам на сервере сайта, указывать кодировку страниц, устанавливать защиту для папок и файлов, производить 301 редирект и некоторые другие действия.
Это описание возможностей данного файла в общих чертах. На самом деле его функционал ещё более расширенный. Файл не имеет названия и пишется как .htaccess. Точка в самом начале является обязательной.
Процедура создания файла .htaccess
Если в корневой папке сайта отсутствует данный файл, его можно очень легко создать собственными силами. Один из самых быстрых способов создания – использование FTP-клиента. Наиболее удобный из них — FileZilla.
Для создания нужно перейти в корневой каталог своего интернет-проекта — нажать в пустом месте правую кнопку компьютерной мыши – выбрать пункт «Создать новый файл» – ввести имя .htaccess – нажать кнопку OK. После этих действий созданный файл можно будет отредактировать. Его открытие можно произвести любым редактором текста.
Но бывает и такое, когда FTP-клиенты скрывают некоторые системные файлы, включая .htaccess. Поэтому, если данный файл не был найден в корневой папке, не нужно спешить его создавать. Прежде всего проверьте его присутствие в скрытых файлах. Для этого необходимо перейти на вкладку “Сервер” и установить галочку на принудительном отображении скрытых файлов.
Итак, создан либо найден файл .htaccess, редирект 301 при помощи его создать будет легко. Однако прежде всего нужно определиться, для чего он нужен.
Самый популярный случай, когда может пригодиться 301 редирект
По рекомендациям ведущих веб-мастеров, каждый ресурс в Сети должен обладать 301 редиректом. И самым популярным случаем, когда он очень нужен, является перенаправление с домена, который в своём составе имеет префикс с www, на домен без него и наоборот.
Это объясняется тем, что у любого сайта в сети Интернет только один тип доменного имени с www либо без него может быть главным. Другой вариант же будет являться зеркалом сайта. Главное зеркало интернет-ресурса расписывается в файле robots.txt при помощи директивы Host. Помимо этого файла, главный вариант домена следует указать в «Яндекс.Вебмастере». Многие поисковые системы хорошо относятся к такому инструменту, как 301 редирект. «Яндекс» не является этому исключением.
При указании главного зеркала интернет-ресурса ваш сайт будет проиндексирован верно и не будет создавать ненужных дублей. Многие новички веб-мастера никогда и не слышали о зеркалах сайтов, что является очень большой ошибкой, которая вызовет в дальнейшем крупные неприятности.
Значение настройки зеркал сайта
После всех проделанных действий с зеркалом поисковики будут определять главный домен автоматически. Можно даже с лёгкостью проверить редирект, всё будет работать хорошо. На этих действиях можно было бы остановиться, но лучшим путём для SEO-оптимизации интернет-ресурса будет дополнительная настройка редиректа.
Сам префикс www в обозначении уже давным-давно должен был уйти в небытие. Но тем не менее в сети Интернет всё ещё существует много ресурсов с www в названии. Для поисковиков домены с www и без него – два различных адреса. Да и многие пользователи при поиске конкретного интернет-проекта вбивают в адресную строку вариант с www. Поэтому этот префикс пока что имеет место быть. Исходя из этого факта, настройка зеркал является необходимым действием. Да и руководство, как настроить редирект 301, тоже является обязательным к изучению, чтобы ваш интернет-проект успешно индексировался в поисковых системах.
Последствия неправильной настройки зеркал
Для того чтобы оценить всю значимость 301 редиректа и верной настройки зеркал, выделим пагубные последствия при их неверной работе. Таковых не так много, всего два. Но весомость у каждого пункта очень велика.
Внешние ссылки будут разделяться между доменами с www и без него в прямой зависимости от того, как на ваш ресурс будут ссылаться другие пользователи и сайты. Это говорит о том, что ваш интернет-проект потеряет часть ссылок, что негативно скажется на его посещаемости и месте в поисковой выдаче. Однако это не самая главная проблема.
Многие веб-мастера понимают, что поисковики непрерывно борются за уникальность контента интернет-ресурсов. Они очень негативно относятся к дублированию информации и довольно серьёзно наказывают сайты со схожим содержимым, вплоть до их полной блокировки в поисковой выдаче. Теперь обрисуем следующую ситуацию: ваш ресурс с самого начала был проиндексирован с префиксом www, но со временем домен без www получил большее число посещение и популярность (на него чаще ссылались и чаще упоминали).
Вы об этом ничего не знаете и дальше развиваете свой проект. С течением времени он наполняется уникальным контентом, многими ссылками и комментариями. Поисковики же, мониторя ресурс без префикса www, отправили его в бан за неуникальный контент. Со временем он полностью перестанет индексироваться.
Для того чтобы избежать такой ситуации, существует файл .htaccess. Редирект 301, прописанный в нём, способен решить проблему разделения ресурса по доменам с www и с его отсутствием.
Редирект с домена www на название сайта без префикса и наоборот
Как производится настройка редиректа в таком случае. Тут всё просто. Необходимо открыть файл .htaccess и прописать в него приведённый ниже скрипт.
Редирект с домена www на название сайта без него:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.moydomen.com
RewriteRule ^(.*)$ http://moydomen.com/$1 [R=301,L].
И по-другому:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^moydomen.com
RewriteRule (.*) http://www.moydomen.com/$1 [R=301,L].
Нужно принять во внимание, что вместо moydomen.com необходимо указать адрес своего интернет-ресурса в обоих случаях!
Следует сохранить файл .htaccess и перенести его в корневую папку с последующим замещением прошлого файла. Теперь посетитель при любом вбивании адреса сайта (хоть с http, хоть без него, хоть с www, хоть без него), будет во всех случаях перенаправляться на главную страницу. Мы рассмотрели, как настроить 301 редирект на с www без www. Давайте теперь разберёмся с остальными способами его применения.
Переход с одного домена интернет-проекта на другой
Подобной схемой редиректа, которая приведена выше, следует пользоваться при переходе с одного домена интернет-проекта на другой. Для демонстрации приведём пример. Допустим, следует переехать с домена moysait-1.com на moysait-2.com. В таком случае следует записать в файле .htaccess код:
RewriteEngine On
RewriteCond %{HTTP_HOST} moysait-1.com
RewriteRule (.*) http://moysait-2.com/$1 [R=301,L].
Смена ссылок ЧПУ и редирект при этом
Временами возникает необходимость сменить ссылки ЧПУ. Вполне возможно, сложилась такая ситуация, что было решено поменять весь раздел на своём ресурсе. Либо же владелец сайта ничего не знал о ссылках ЧПУ, а блог уже существовал и наполнялся материалами. В этом случае может помочь перенаправление. Как настроить 301 редирект для такого случая? Важно, что при таком положении дел, все показатели страниц (ссылки, их вес в поисковой выдаче), останутся прежними.
Приведём простой пример. Было решено сменить название страницы с moya_infa.html на obo_mne.html. В таком случае нужно записать в .htaccess код: redirect 301 moya_infa.html http://www.moydomen.com/obo_mne.html.
Подобным образом производится и редирект 301 со страницы на страницу.
Перенаправление при смене расширения файла
Приведём ещё один пример. Веб-мастеру необходимо сменить расширение у файла moya_stranichka.html на moya_stranichka.php. Подобно прошлому пункту, прописываем в .htaccess такой код: redirect 301 moya_stranichka.html http://www.moydomen.com/moya_stranichka.php.
Редирект при партнёрских программах
Например, необходимо перенаправить посетителя сайта на страницу с партнёркой. Сама ссылка партнёрской программы выглядит как www.partner.com/?ref=16011. Заметив такую ссылку, многие посетители ресурса не будут переходить по ней, заранее догадавшись о ваших намерениях.
Для придания ссылке надлежащего вида нужно создать отдельную страничку, как пример dlya_druzei.html, с которой будет производиться редирект на страничку с партнёрской программой. Осталось лишь отредактировать файл .htaccess: redirect 301 dlya_druzei.html http://www.partner.com/?ref=16011.
Далее в статье рассмотрим, как произвести редирект 301 в движке Joomla и с помощью языка PHP.
Как произвести редирект 301 в CMS Joomla
Многие пользователи сети Интернет наверняка наблюдали страницу с ошибкой 404. В движке Joomla уже имеются несколько встроенных способов редиректа со страницы на страницу. Однако они работают не всегда. И являются очень трудными для понимания обычным пользователем. Тут на помощь придёт редирект 301. Joomla имеет в своём стандартном составе файл .htaccess, с которым можно производить все манипуляции, описанные выше.
Давайте произведём настройку для перенаправлений по всем страницам вашего интернет-проекта. Прежде всего, в каталоге нужно отыскать файл htaccess.txt и дать ему правильное название .htaccess. После этого в админке следует выставить в настройках перенаправлений включение ЧПУ (SEF) и поставить галочку на перенаправление URL.
Затем следует открыть файл .htaccess и прописать в нём правила для нужных перенаправлений.
Редирект с помощью PHP
Если по каким-либо причинам доступ к файлу .htaccess не существует либо закрыт, есть способ сделать по-другому редирект 301. PHP в этом поможет.
Для того чтобы произвести перенаправление с домена на домен с сохранением всех параметров, необходимо в любом редакторе текстов создать файл с расширением .php, назвать его index и скопировать туда следующий скрипт:
<?$ref=$_SERVER[‘QUERY_STRING’];
if ($ref!=») $ref=’?’.$ref;header(‘HTTP/1.1 301 Moved Permanently’);
header(‘Location: http://moydomain.ru/’.$ref);
exit();
?>.
Здесь moydomain.ru является доменом, на который осуществляется редирект. Полученный файл нужно закачать на сервер в главный каталог сайта.
Для того чтобы произвести редирект со страницы на страницу в пределах одного домена либо разных, нужно перед основным кодом переносимой страницы вставить следующее:
<?php;
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: http://www.moydomain.ru/moycategory/moypage.htm»);
exit();
?>.
В результате www.moydomain.ru/moycategory/moypage.htm является новой страницей, на которую осуществляется перенаправление.
Важно принять во внимание, что страница, в код которой вставляется приведённый выше скрипт, должна иметь в конце названия расширение .php. Иначе придётся воспользоваться редиректом через .htaccess.
Теперь, после изучения статьи, любой вебмастер будет знать, как настроить редирект 301, что это такое и чем он полезен. Здесь показаны наиболее простые варианты использования перенаправлений. Однако о них необходимо иметь представление любым владельцам сайтов и блогов. И стоит принять во внимание, что важно не только настроить верно перенаправление, но и проверить его на предмет правильной работы.
Как видим, перенаправления можно создавать не только с помощью файла .htaccess, но и через стандартные возможности многих CMS, и с помощью скриптов PHP.
fb.ru