301 редирект со страницы на страницу. Редирект с помощью директив модуля mod_rewrite

Правила приведены для сервера Apache. В правилах: %{QUERY_STRING} - обозначает фрагмент URL -адреса после знака вопроса (задания значений CGI -параметров). Срабатывание того или иного правила для редиректа определяется тем, попадает URL -адрес страницы под это правило или нет. О значении тех или иных обозначений (^, $, NC и т.д.) .

Ниже даны наиболее используемые правила настройки файла.htaccess для 301 редиректа. Лучше размещать все правила после двух строк:

Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^site\.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1 RewriteCond %{HTTP_HOST} ^www.site\.ru$ RewriteRule ^(.*)$ http://site.ru/$1 Redirect 301 /was.php http://www.site.ru/new.php

При этом, новый адрес указывать необходимо полностью с http и доменным именем.

RewriteRule ^dir /dir-new/$1

Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 , тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:

RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ RewriteRule ^dir/index\.php$ /new/sef/?

Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:

RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ RewriteRule ^dir/index\.php$ /new/sef/?

Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/ , но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.

RewriteRule ^dir/$ http://www.site.ru/new-dir/

Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона.рф преобразуется в.xn--p1ai .

RewriteCond %{HTTP_HOST} ^old-site\.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

И для домена в зоне РФ:

RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ RewriteRule ^(.*)$ http://www.site.ru/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.site.ru/$1/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ http://www.site.ru/$1 RewriteCond %{HTTP_HOST} ^si-te\.ru$ RewriteRule ^(.*)$ http://www.site.ru/si-te/ RewriteRule ^bitrix/ /bitrix/admin/ RewriteRule ^(.*)$ http://www.newsite.ru/new/ RewriteRule ^dir(.*)$ /new-file.php RewriteRule ^dir/no-file.html /no-file-new.html RewriteRule ^dir(.*)$ /all.php RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php

Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

DirectoryIndex index.html index.php index.htm index.shtml RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://www.site.ru/ RewriteCond %{HTTP_HOST} ^test.site.ru$ RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} RewriteRule [^abc]/unique-file.html /unique-file.html

Код позволяет поставить 301-редирект со всех папок вида http://site.ruuniqe-file.html на один файл в корне /unique-file.html . Бывает полезен при переделке сайта и изменении ссылок.

RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11

Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/

Внимание, важно, чтобы код ответа сервера для 404 ошибки, был именно 404. Путь к файлу указывается с помощью следующей строчки:

ErrorDocument 404 /404-for-me.php RewriteCond %{HTTP_HOST} ^(+)\.site\.com$ RewriteRule ^(.*) http://site.com/$1 RewriteCond %{HTTP_HOST} ^(+)\.site\.com$ RewriteCond %{HTTP_HOST} !=one.site.com RewriteRule ^(.*) http://site.com/$1

Все правила выполняются в прямом порядке их следования в файле.htaccess и правило, написанное позже, и будет выполняться позже.

Для сайтов, на которых используется не сервер Apache, аналогичные 301 редиректы легко настраиваются с помощью PHP :

Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.

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)

RewriteRule (.*) http://mobile.site.ru/

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)

RewriteRule (.*) http://no-search.site.ru/

Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/

RewriteCond %{QUERY_STRING} ^view=featured$ RewriteRule ^component/content/?$ /?

RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ RewriteRule ^index\.php$ /? . - Точка заменяет произвольный символ. - обозначает перечень символов, совпадающих с буквами a, b, или с. [^abc] - перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с. * - означает, что предшествующий символ может повторяться (0 или более раз). * - команда найдёт идущие подряд символы из заданного набора. [^abc]* - с точностью до наоборот. .* - заменяет абсолютно любой набор символов. ".*" - найдёт все подстроки между кавычками. ^ - начало строки (в том случае, если используется в начале выражения). $ - обозначает конец строки. \w - буква, цифра или подчёркивание _. \d - заменяет любую цифру. \D - заменяет любой символ, но не цифру. - заменяет любую цифру. - любая буква от a до z (весь латинский набор символов) в нижнем регистре. - любая буква от A до Z в ВЕРХНЕМ регистре. - любая буква от a до Z в любом регистре. - то же самое. RewriteRule (.*) $1?

Располагать после: RewriteBase /

Памятка по используемым символам и обозначениям Строчка RewriteCond - условие выполнения правила RewriteRule . Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.

^ - спецсимвол начала строки;
$ - спецсимвол конца строки;
! - спецсимвол отрицания;
. - точка, заменяет любой символ, но только один;
() - группировка;
\ - «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.

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

Символ повторяется 0 или 1 раз.
+ - повторяется от 1 до 65536 раз.
* - повторяется от 0 до 65536 раз.

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

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}

RewriteCond %{SERVER_PORT} ^443$ RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://your_site.com/$1

Если вы хотите правильно настраивать 301 редирект на своем сайте. То сегодня мы подготовили пошаговое руководство, в котором рассказываем и показываем все детали и нюансы.

Руководство по 301-му редиректу состоит из двух частей:

— Наглядная детальная инфографика

— Статья с примерами кода и само руководство (если вам сразу нужен пример кода, то лучше сразу пролистать инфографику)

Что такое редирект?

Редирект — это способ перенаправить пользователей и поисковых систем на другой URL отличный от того, который они первоначально запросили. Ниже приведены описания некоторых из наиболее часто используемых видов перенаправления.

301 Moved Permanently

301 редирект является постоянным редиректом, который передает около 90-99% ссылочного веса. Данный редирект указывает, что страница перемещена по новому адресу и старый url следует считать устаревшим.

302 Found (HTTP 1.1) / Moved Temporarily (HTTP 1.0)

302 редирект – временный редирект. Данный редирект передает 0% от ссылочного веса и, в большинстве случаев, не должен использоваться. На данный момент интернет работает по протоколу HTTP, который и определяет, как обрабатывать URL-адреса. В двух версиях этого протокола этот ответ сервера имеет разный статус ответа:

— HTTP 1.0: 302 ответ сервера это «Moved Temporarily » – текущий документ временно перемещен на другой URL.

— HTTP 1.1: произошло изменение ответа сервера на «Found» – текущий документ найден.

307 Moved Temporarily (HTTP 1.1 Only)

307 редирект в протоколе HTTP 1.1 стал приемником 302 редиректа. В то время, как основные поисковые боты, начнут рассматривать его как аналог 302, для почти всех случаев лучше всего использовать 301. Исключением из этого правила является, когда контент действительно переехал только временно (например, во время технического обслуживания) и поисковые системы уже понимают, что ваш сервер совместим с HTTP 1.1. Но, так как это практически невозможно определить, действительно ли поисковые системы поняли, что ваш сервер совместим с этим новым протоколом, то лучше использовать 302 редирект для контента, который был временно перемещен.

Другие виды редиректов

Существуют также и другие виды редиректов: Meta Refresh или с помощью JavaScript – которые выполняются на уровне страницы, а не на уровне сервера. Вот как выглядит типичный редирект Meta Refresh:

RewriteCond %{HTTP_HOST} ^www.site\.com$ RewriteRule ^(.*)$ http://site.com/$1

Для склейки с без www на с www:

RewriteCond %{HTTP_HOST} ^site\.com$ RewriteRule ^(.*)$ http://www.site.com/$1

RewriteCond %{HTTP_HOST} ^site\.com$ RewriteRule ^(.*)$ http://www.site.com/$1

Для того чтобы правильно выбрать на какой из вариантов склеивать, желательно посмотреть:

— как из этих вариантов больше находиться в топе
— для какого из вариантов больше страниц в индексе

Канонизация слеша в конце урла

При проектирование сайта важно определиться с одним форматом использование слеша в конце урла, так как для поисковых систем 2 урла вида:

— http://www.site.com/cat1/

— http://www.site.com/cat1

являются разными. Поэтому, после того как вы определились, как именно у вас будет на сайте, дальше необходимо прописать следующие редиректы

Для того чтобы удалить слэш в конце:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/

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

RewriteCond %{THE_REQUEST} ^{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://www.site.com/$1

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

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

RewriteRule old-catalog /(.*) / old-catalog /$1

Редирект при смене расширение файлов

Если вы вдруг переехали на другую платформу или CMS и при этом у url-ов изменились только расширение, то в этой случае вам поможет вот такой редирект

RewriteCond %{HTTP_HOST} !^www\.site\.com RewriteRule ^(.*)$ http://www.site.com/$1

Таким, образом все домены типа www.site.ru, www.site.net, test.site.com будут переадресовываться на сайт www.site.com.

Как удалить несколько слешей/тире в урле

Иногда «по случайности» в урле могут появится по несколько слешей, например, www.site.com/catalog////page-1.html. В таких необходимо делать 301 редирект на страницу с одним слешер www.site.com/catalog/page-1.html:

RewriteCond %{REQUEST_URI} ^(.*)--(.*)$ RewriteRule . %1-%2

Как сделать редирект с любого урла на url только в нижнем регистре

Поскольку, поисковыми системами регистр букв учитывается, то при проектировании сайта желательно, чтобы все урлы были в нижнем регистре. Однако, если вы изначально упустили данный момент, то лучше всего воспользоваться следующим кодом для редиректа на уровне php-скрипта:

$lowerURI=strtolower($_SERVER["REQUEST_URI" ]); if($_SERVER["REQUEST_URI" ]!=$lowerURI) { header ("HTTP/1.1 301 Moved Permanently" ); header ("Location: http://" . $_SERVER["HTTP_HOST" ] . $lowerURI); exit(); }

$lowerURI=strtolower($_SERVER["REQUEST_URI"]); if($_SERVER["REQUEST_URI"]!=$lowerURI) { header("HTTP/1.1 301 Moved Permanently"); header("Location: http://" . $_SERVER["HTTP_HOST"] . $lowerURI); exit(); }

Как переехать на новый домен? Оптимальная стратегия 301 редиректа

Оптимальной стратегией переезда на новый домен учитывая пожелания 2-ух основных поисковых систем рунета Yandex и Google это:

— постраничный 301 редирект со старого сайта на новый.
— при этом для файла редирект не делаем, а прописываем в нем директиву Host на новый домен.

Тогда код для настройки редиректа на старом сайте может иметь следующий вид:

RewriteCond %{REQUEST_FILENAME} robots.txt$ RewriteRule ^([^/]+) $1 [L] RewriteCond %{HTTP_HOST} !^www\.site\.com RewriteRule ^(.*)$ http://www.site.com/$1 а файл robots.txt для старого сайта: User-agent: Yandex Disallow: Host: newsite.com

Генерация 301 редиректов

Если вы не очень технически подкованы, то можно воспользоваться сервисами генерации базовых редиректов:

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

Как проверить 301 редирект

После каждого изменение логики работы 301 редиректа необходимо проверять работоспособность сайта:

— вообще ли работает сайт: зайти на главную страницу)

— походить по основным разделам и страницам сайта

Также для более тщательной проверки отработки редиректов можно использовать следующие сервисы:

Как и когда лучше использовать 301 редирект vs Canonical

Хотя есть некоторые нюансы, Google предоставляет некоторые четкие правила, для того чтобы он понимал, что именно мы хотим сказать. В очень простой ситуации вот, вот как понимают данные инструкции поисковые системы:

301 — Эй, Поисковики: моя страница уже не здесь и она навсегда переехала на новую страницу. Пожалуйста, удалите старую страницу из индекса и передайте её вес на новую страницу.

Canonical - Эй, Поисковики (так для большинства поисковых систем): у меня есть несколько версий этой страницы (или содержания), пожалуйста, индексируйте только ту версию страницы, на которую стоит canonical. Я буду держать другие страницы доступными для людей, чтобы они могли их видеть, но, Поисковик, не включай их в свой индекс и пожалуйста, передайте вес на мою предпочтительную страницу.

Когда лучше использовать 301 редирект

— По умолчанию - это предпочтительный метод

— Для страниц: если страница навсегда переехала или была заменена на новый адрес

— Для доменов: если сайт переехал на новый домен (продажа сайта, ребрендинг и т.д.)

— Для 404 страниц и контентом, который потерял свою актуальность (при условии соответствующего содержания). Например, если удален товар из определенного каталога, то можно сделать редирект на похожий товар, или на url-категории к которой пренадлежал данный товар.

Когда лучше использовать rel= «canonical»?

— Когда 301 редиректы не могут быть реализованы, или их внедрение займет слишком много времени

— Страницы с несколькими разными url по сути одной страницы (например, сортировки каталога, отслеживания партнерских ссылок, …)

— Кросс-доменов, когда оба сайта похожи, но похожий контент нужно оставить на каждом из доменов.

Итого

Ошибки при использовании редиректов

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

— Использование не правильного типа редиректов. При выборе типа редиректа необходимо учитывать нюансы каждого из них.

— Внедрение внутренних редиректов без смены ссылок на новые адреса. После внедрения всех редиректов у себя на сайте, необходимо проверить, чтобы каждая страница вашего сайта уже ссылалась на новую и внутри сайта у вас не было ссылок на страницы с которых происходит редирект.

— Редирект на не релевантные страницы/контент. Редирект всегда желательно проставлять на максимально релевантную страницу: или на похожую страницу, или на ветку каталога/раздела к которому принадлежала данная страница.

— Не правильный выбор использования rel=canonical vs 301 редирект. Смотри выше.

Конфигурационный файл .htaccess является конфигом для веб-серверов на Apache. Большинство хостингов работают через этот сервер, поэтому на каждом сайте присутствует этот файл. Вебмастера могут частично управлять его работой внося в него свои изменения. В этой статье мы рассмотрим директивы и правила, которые можно менять в работе сервера.

Самый главный файл .htaccess располагается в корне сайта:

Его действия распространяются на текущий каталог и на все вложенные каталоги. Т.е. у владельцев сайтов есть возможность воздействовать только на работу своего проекта, не мешая работе всего сервера. Если этот файл отсутствует, то его можно создать с помощью любого блокнота. Главное, чтобы название файла было ".htaccess" - без форматов.txt, .doc и т.д.

Через файл .htaccess чаще всего настраивают 301 редиректы на уровне сервера, что сильно ускоряет процесс перехода на новую страницу, т.к. не надо загружать промежуточную страницу. Также здесь прописывается какой файл обрабатывает 404 ошибку .

Чуть ниже мы рассмотрим все распространенные варианты редиректов через .htaccess , а для начала ознакомимся с опциями и правилами.

Чтобы иметь возможность работать с редиректами нужно включить модуль ReWriteEngine . Для этого необходимо прописать две строчки кода (желательно в самом верху файла .htaccess ):

Options +FollowSymLinks RewriteEngine On

Разместите эти строки в самом верху файла .htaccess , чтобы иметь возможность работать с директивами модуля mod_write.

Также на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).

1. Правила Redirect, RewriteRule и RewriteCond 1.1. Директива Redirect

Синтаксис Redirect :

Redirect /откуда http://куда_полный_адрес

Redirect устанавливает прямой редирект с одной страницы на другую.

В status пишут код редиректа. Является необязательным параметром. Чаще всего пишут 301, что сигнализирует о постоянном смене адреса страницы.

Важно, чтобы страница "откуда" была прописана в формате без указания полного адреса сайта, но с указанием полного относительного адреса URL начиная со слэша "/" (т.е. с корня сайта). Страницу куда идет редирект нужно писать полностью, т.е. абсолютный адрес страницы URL (т.е. с названием домена и протокола http или https).

Например

Redirect 301 /oldpage.php http://site/newpage.php

Можно также писать по другому

RedirectPermanent 301 /oldpage.php http://site/newpage.php или Redirect permanent 301 /oldpage.php http://site/newpage.php 1.2. Директива RewriteRule

Директива RewriteRule устанавливает правила перехода. Синтаксис следующий:

RewriteRule Шаблон Подстановка [коды]
  • При внешнем редиректе меняется урл адреса в строке браузера - " "
  • При внутреннем - не меняет урл адреса в строке браузера - " " или "[L] "
1.3. Директива RewriteCond

Директива RewriteCond определяет условия при котором выполняется правила в RewriteRule.

RewriteCond Сравниваемая_Строка Условие

Например, этими условиями могут быть браузер пользователя, IP-адрес , заголовок и т.д.

1.4. Директива RedirectMatch

Директива RedirectMatch аналогична Redirect с той лишь разницей, что позволяет записывать регулярные выражения.

RedirectMatch Откуда Куда 2. Примеры 301 редиректов в.htaccess

Мы уже рассматривали множество примеров с редиректом по .htaccess в статьях:

  • Смена адреса сайта - редирект со старого домена на новый

Здесь мы дополним варианты редиректов, которых еще не было.

2.1. Редирект с одной страницы на другую

Редирект с site.ru/cat/oldpage на site.ru/newpage.html

RewriteRule ^cat/oldpage.* /newpage.html

Или второй вариант:

Redirect 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Редирект со всех файлов.htm на.html RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)\.htm$ $1.html

Или второй вариант:

RewriteRule ^(.*)\.htm$ $1.html 2.3. Редирект всего каталога на другую страницу

С любой страницы в каталоге и подкаталогах /old/ будет происходит редирект на /new.php

RewriteRule ^old(.*)$ /new.php 2.4. Удаление лишних слэшей в адресе URL

Например, страница /catalog///stranica.html доступна и открывается. Чтобы избежать такой ситуации и не плодить бесконечное число дублей следует записать следующий редирект

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 2.5. Реврайт без редиректа

Можно загрузить другую страницу без смены адреса страницы URL. Например, загрузим страницу /news.html , а в адресной строке будет отображаться адрес /news/happy

RewriteRule ^news/happy.* /news.html [L] 2.6. Простановка замыкающего слеша в конце адреса главной страница

Например, многие сервера работают так, что последний слэш не пишется в URL. Например, http://site.ru . Ниже приведенный код решают это проблему: сайт будет открывать по http://site.ru/

RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ 2.7. Удаляем директорию каталога из URL

Например для редиректа со страницы site.com/directoriya/stranica.html на site.com/stranica.html нужно прописать следующее:

RewriteRule ^directoriya/(.+)$ http://site.com/$1

Или второй вариант:

RewriteCond %{DOCUMENT_ROOT}/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. Редирект GET параметров

Например, сделать редирект со страницы /?act=page&id=2 на /page-2/

RewriteCond %{QUERY_STRING} act=page RewriteCond %{QUERY_STRING} id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Редирект на мобильную версию сайта m.site.ru

В данном примере сначала проверяется факт того, что пользователь открыл сайт с мобильного устройства {HTTP_USER_AGENT} , далее происходит замена адреса сайта на m.URL

RewriteCond %{HTTP_HOST} ^(.*)$ RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) RewriteRule ^$ http://m.%1 2.10. Редирект с поддомена

Например, выполним редирект с любой страницы поддомена poddomen.site.ru на основной домен site.ru

RewriteCond %{HTTP_HOST} ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} 3.Другие примеры с htaccess 3.1. Запретить IP-адрес и браузер

Запретим открывать сайт для пользователя с браузера IE с IP-адресом 172.111.222.55

RewriteCond %{HTTP_USER_AGENT} MSIE RewriteCond %{REMOTE_ADDR} ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Запретить конкретный файл

Запретим для всех файл disable_file.html :

deny from all 3.3. Разрешить доступ с одного ip

Доступ будет разрешен только с одного ip-адреса 172.111.222.55

order deny,allow deny from all allow from 172.111.222.55 3.4. Запретить доступ с разных ip

Запретить доступ к сайту с нескольких ip-адреса 172.112.222.55, 172.113.222.55, 172.114.*.*

order deny,allow deny from all deny from 172.112.222.55 deny from 172.113.222.55 deny 172.114.*.* 3.5. Редирект в URL с больших символов на маленькие

Все большие буквы в адресе URL будут переведены на маленькие.

RewriteRule - RewriteRule ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.*)$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*)F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q(.*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T]*)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^([^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y$2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %{ENV:HASCAPS} TRUE RewriteRule ^/?(.*) /$1

301 Редирект - это способ постоянного перенаправления поисковых систем и посетителей сайта на адрес, который отличается от изначально запрашиваемого. Такой ответ сервера указывает на то, что старый url утратил актуальность, страницу переместили. После переиндексации Яндекс и Google поймут куда вы теперь хотите вести посетителей и станут предлагать пользователям новый адрес.

Удивительно, но факт: с помощью редиректа можно превратить потерю в победу и привлечь на свой ресурс еще больше трафика. Но об этом чуть позже.

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

Для чего используется 301 редирект?

Код 301 - эффективный, простой в реализации вариант переадресации web-страницы. Это удобный способ сохранения рейтинга конкретной страницы сайта.

Основные причины, чтобы добавлять 301 редирект:

  • сохранение «накопленных пользовательских сигналов» контента
  • с передачей ссылочного веса новой странице;
  • перенаправление трафика из других адресов на нужный;
  • в случае ребрендинга и смены домена, чтобы не потерять клиентов;
  • перемещение страниц;
  • склейка (с www и без, http и https);
  • удаление дублей страниц.

Внимание! Остановите выбор на адресе, который имеет стратегически большее значение, является предпочтительным для посетителей и поисковых систем.

Редирект можно назвать своеобразной палочкой-выручалочкой. В случае переезда всего сайта или отдельных страниц он сохранит все плоды проделанной работы: авторитет доменного имени и ранжирование в поиске. Главное - использовать перенаправление по назначению.

Сегодня вы получите 22 конкретных примера установки кода 301 и пять важных рекомендаций. С последних и начнем!

Важно! Ошибки в настройках редиректов уменьшают эффект их использования.

1. Избегайте редиректов, идущих друг за другом. Каждая последующая переадресация увеличивает нагрузку на сервер, уменьшает эффективность редиректов.


Правильным в данном примере должен быть редирект с 1 шага на 3й.

2. Размещайте правила редиректов от частных правил к общим так как противоречия частных общим могут вызывать их не срабатывание. Если частные будут ниже общих, в случае противоречий правил будут срабатывать общие как те, что идут первее по списку.

3. Из-за того что браузеры обычно запоминают перенаправления, лучше проверять код состояния HTTP через специальный сервис .

4. Переадресация не должна быть циклической, то есть странице нельзя ссылаться на саму себя.

Пример циклического редиректа: со страницы без слеша в конце URL стоит 301 редирект на страницу со слешем, на которой стоит 302 редирект обратно:


5. Полезный редирект - тот, что ведет на страницу, которая во всех нюансах повторяет запрашиваемую.

Популярные виды редиректов

Желаете узнать, как сделать переадресацию? Сначала надо ознакомиться с названиями и особенностями самых используемых статусов.

301

Это постоянный редирект, обозначающий, что старый адрес страницы стоит считать устаревшим, контент находится на новом месте. Передает на новый документ почти весь (нет точных данных) ссылочный вес и склеивает накопленные внутренние метрики.

302

Представляет собой временный редирект. Не склеивает накопленные внутренние метрики страницы.

Статус ответа сервера зависит от версии протокола HTTP:

  • HTTP 1.0 - текущая публикация временно перемещена на другой url (Moved Temporarily);
  • HTTP 1.1 - документ не найден (изменения ответа на Found).
307

307 Moved Temporarily подходит лишь для исключительных случаев - действительно кратковременного переезда контента, например, при техническом обслуживании.

Meta Refresh

Обновления Meta являются переадресациями, которые осуществляются не на уровне сервера, а на самой странице. Чаще всего такой код ответа связан с пятисекундным обратным отчетом, дополненным текстом «Если переход не произошел за пять секунд, нажмите здесь».

Важно! В использовании постоянного редиректа нет необходимости, если ваш переезд временный или связан с проблемами старого доменного имени. При получении бана или фильтра вы перенесете прошлые проблемы на новый адрес.

В чем разница между постоянной и другими переадресациями?

302 и 301 редирект похожи между собой. Тем не менее для большинства случаев оптимальным решением станет именно постоянная переадресация.

Эти коды ответа HTTP не одинаково воспринимаются роботами и, соответственно, по-разному влияют на поисковую выдачу. Редирект 301 - знак того, что поисковику стоит забыть о старом адресе и больше никогда на него не заходить. А 302 дает сигнал о продолжении индексирования контента, размещенного на изначально запрашиваемой странице.
В случае 301 перенаправления утратившая актуальность публикация перестанет отображаться в поисковой выдаче. При 302 редиректе в индексе будут присутствовать обе страницы.

По сути, лучше всегда ставить код 301.

  • на запрашиваемой странице есть ссылки, которые обязаны и дальше индексироваться;
  • индексация новой страницы не является критичной.
Опыт из практики: 301 редирект против 302

Статус 302 - временная мера, сообщающая поисковикам о том, что на старой странице проходят технические работы и ее надо сохранить в выдаче.

Рассмотрим на примере. Сайт изменил доменную зону, а затем еще и обзавелся защищенным протоколом https. Однако разработчики настроили не постоянное, а временное перенаправление.

Во время работы 302 редиректа в индексе Яндекса и Google находилось 3 копии одной и той же интернет-площадки. Из-за этого произошло существенное проседание позиций.

Когда ошибка была исправлена, роботы склеили дубли, исключив лишние страницы из своей выдачи. Сайт снова вернулся в ТОП.

301 редирект vs Canonical

Несмотря на определенные нюансы, поисковые системы установили четкие правила использования команд. Вот как их понимают Гугл и Яндекс:

  • 301 - «Моя страница навсегда переехала в другое место, она не вернется. Удалите, пожалуйста, ее из своего индекса и передайте вес новому документу».
  • Canonical - «У меня имеется несколько версий содержания страницы. Просканируйте, пожалуйста, приоритетную для меня копию, которую я пометил canonical. Остальные материалы тоже будут доступны пользователям, но индексировать их не нужно».
Когда лучше применить 301 редирект:
  • это лучший метод по умолчанию;
  • для ошибки 404 и контента, утратившего актуальность, но имеющего
  • внешние ссылки и много трафика;
  • при смене домена в результате ребрендинга или продажи ресурса;
  • для страницы, которая переехала навсегда.
Случаи использования rel=«canonical»:
  • если статья имеет нужные посетителям дубли, например, описания
  • одной и той же продукции, но разного цвета;
  • когда постоянное перенаправление реализовать трудно;
  • для кросс-доменов с похожими статьями;
  • при разных адресах одного контента (сортировка каталога).
Где настраивается 301 редирект?

В зависимости от движка, переадресацию можно выполнить разными способами.

.htaccess, или httpd.conf для Apache

Это популярный благодаря своей простоте метод, для осуществления которого надо создать файл под названием.htaccess в папке сайта. Или отредактировать, если он уже предусмотрен движком.

Важно! Перед любыми изменениями сделайте Backup редактируемого файла (или всего сайта)

Для постоянного перенаправления пропишите в начало файла, подставив свои данные:

  • Редирект всего сайта на другой адрес:

Redirect / http://new-site.ru/

  • Редирект с одной страницы на другую:

Redirect 301 /page-1 .html /page-2 .html

  • Редирект с www на без www:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example\.ru
RewriteRule ^(.*)$ http://example.ru/$1

  • Переадресация с HTTP на HTTPS

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Учтите, что при работе с файлом команда происходит на уровне сервера с ОС Linux или Apache с активированным модулем Mod_rewrite.

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

Через плагины в CMS

Редирект на другой сайт легко настроить при помощи специального плагина. Так, для WordPress подойдет расширение Simple 301 Redirects . Единственный недостаток дополнительного модуля - ручное формирование списка адресов для переадресации.


Через PHP-условие

Такое решение подойдет тем, кто отлично знает структуру web-проекта и разбирается в PHP. Если сайт сделан на CMS, попробуйте открыть файл index.php в корне движка и прописать там:

if ($_SERVER [ "REQUEST_URI" ] == "/index.php" ) {
header ("Location: /" , TRUE , 301 ) ;
exit () ;
}

(в первой строке укажите старый url, а во второй - новый)

Кроме того, перенаправление PHP можно сделать при помощи отправки заголовков (скрипта):

ASP редирект


ASP.NET редирект

Найдите в корне своего сайта файл web.config и вставьте в секцию синтаксис:

< script runat= “server ”>
private void Page_Load(object sender, System.EventArgs e)
{
Response .Status = “301 Moved Permanently”;
Response .AddHeader (“Location”,“http: //www.new-url.com”);
}

ColdFusion редирект