Как сделать редирект в htaccess

Доброго воскресного дня!

Очень часто на форумах можно встретить вопросы, посвящённые .htaccess — файлу конфигурации веб-сервера Apache. Основной камень преткновения в том, что при разработке не стояла задача удобной конфигурации для конечного пользователя (в дистрибутив не включена оболочка для визуальных установок с помощью галочек, выпадющих списков и тому подобное), зато администраторы серверов справляются с этой задачей замечательно, довольствуясь «маном» (от команды Linux — man — краткое руководство от разработчиков, или в данном случае — от профессионалов для профессионалов).

В большинстве случаев требуются совсем несложные манипуляции: безусловный редирект на другой сайт, либо перенаправление с одного места в другое (допустим, когда поменялся URL раздела). И каждый человек начинает считать, что уж его-то проблемы точно нигде нет, и даже бесполезно искать решение в интернете и поиске по форуму. Давайте же посмотрим, что эти проблемы таковыми на самом деле не являются.

Редирект .htaccess

Редирект .htaccess: постоянное перенаправление, 301


Подобная штука имеет разные названия. Непонятки может вызвать разве что число — почему же 301? Суть кроется в самом протоколе HTTP, который на запросы клиента отвечает определённым кодом состояния. Код 404 Not Found (Страница не найдена) известен почти всем. Код 200 OK почти не известен, но именно он означает, что всё в порядке и документ будет показан в браузере. А вот код 301 Moved Permanently означает, что документ окончательно перебрался на новый адрес. Именно его и называют чаще всего перенаправлением, хотя общий пул ответов обозначен как — 3xx: Redirection.

В общем случае, для безусловного внешнего (назовём его пользовательским) редиректа, при котором браузер автоматически переадресовывается на другую страницу, обычно незаметно для пользователя (изменяется адресная строка), можно в .htaccess поместить такой код:
RewriteEngine On
RewriteRule .* http://newsite.ru/ [L,R=permanent]

Здесь, первая строка включает механизм модуля mod_rewrite, который позволяется вытворять с адресами всё, что угодно. Назовём это преобразованием URL по условиям на лету. Вторая строка определяет непосредственно правило для преобразования, в примере выше все запросы редиректятся на http://newsite.ru/. В квадратных скобках размещаются флаги: L — последнее (Last) правило, R — тип перенаправления (Redirect), указывается в виде R=code, где code — буквенное или числовое обозначение (permanent или 302).

Этот способ хорош, когда вам неважно, на какую страницу нового сайта ссылаться. Но если вы переехали на другой домен, то желательно делать редиректы всех запросов с сохранением адресов. Для этого используйте такой код:

RewriteRule ^.*$ http://newsite.ru/$0 [QSA,L,R=permanent]
Новый флаг QSA сохранит так же и параметры, которые можно встретить в адресах после знака вопроса. В уже знакомом примере:

https://a-panov.ru/?p=389

если я размещу в .htaccess код выше, то произойдёт перенаправление на адрес http://newsite.ru/?p=389 чего без данного флага не было бы.

Как настроить редирект на www (или без www)

Подобные перенаправления требуются для случаев, когда сайт доступен по вариантам nsite.ru и www.nsite.ru, в этом случае поисковики считают их дублями и могут либо самостоятельно выбрать один из вариантов в качестве главного зеркала, либо в поиске будут варианты с обоих доменов. В общем случае, это отрицательный фактор при ранжировании сайта.

Вариант попроще, для одного домена. Перенаправление производится с поддомена www.site.ru на site.ru:
RewriteCond %{HTTP_HOST} ^www.nsite.ru$
RewriteRule .* http://nsite.ru/$0 [QSA,L,R=permanent]

Здесь появилась новая директива RewriteCond, которая задаёт условие, при котором должны срабатывать редиректы — правила RewriteRule. Условие, в данном случае, имя домена, соответствующее www.nsite.ru (в регулярных выражения символ точки означает «любой символ», поэтому его желательно экранировать с помощью обратного слеша).

Обратное перенаправление тоже выполнить очень просто:

RewriteCond %{HTTP_HOST} ^nsite.ru$
RewriteRule .* http://www.nsite.ru/$0 [QSA,L,R=permanent]

Оба варианта рабочие, но у них есть маленький минус — для каждого нового конфига необходимо заменять домен nsite.ru на свой собственный. Нельзя ли сделать уникальный вариант? Легко!

Редирект с любого поддомена www:
RewriteCond %{HTTP_HOST} ^www.(.*)$
RewriteRule .* http://%1/$0 [QSA,L,R=permanent]

Редирект на поддомен с www:
RewriteCond %{HTTP_HOST} !^www.
RewriteRule .* http://www.%{HTTP_HOST}/$0 [QSA,L,R=permanent]

Как создать .htaccess

Такие вопросы тоже возникают. Проблема в том, что стандартный Проводник (приложение в Windows, отвечающее за графический интерфейс) не позволяет создавать файлы, начинающиеся с точки (созданием файлов или папкок осуществляется щелчком правой кнопкой на рабочем столе или в окне, и выбора нужного действия из списка Создать). Но выход есть: открывайте стандартный рекдатор Notepad (блокнот), в меню выбираете Файл → Сохранить как…, и в качестве имени сохраняемого файла указываете .htaccess — после этого он будет создан.

Файл .htaccess не работает

Бывают случаи, когда директивы из файла не работают. Обычно это вызвано тем, что в конфигурации Apache отключена поддержка .htaccess, за что отвечает директива:
AllowOverride none

Обычно это делается, чтобы несколько увеличить быстродействие — в этом случае веб-сервер не производит поиск и разбор .htaccess.

Возможен и такой вариант, что на сервере не используется Apache, например, IIS — основной «гость» на Windows-хостинге. Для уточнения свяжитесь с поддержкой своего хостера.

Есть ли какой-нибудь аналог .htaccess в nginx?

Ещё один довольно частый вопрос. В этом веб-сервера такой возможности нет. Однако, подобное обычно и не требуется. Дело в том, что nginx, как правило, устанавливается в качестве фронденда, т. е. принимает и обрабатывает все запросы, которые либо выполняет сам, либо перенаправляет на бэкенд, роль которого может выполнять Apache, который можно дополнительно конфигурировать с помощью .htaccess.

a-panov.ru

Создание файла .htaccess

Первым этапом настройки редиректа .htaccess является, собственно, создание самого файла. Ваш .htaccess должен быть простым текстовым файлом. Это означает, что вам нужно создать его в программе для редактирования текста, способной генерировать файлы plain text (.txt).


  • На компьютере с Windows вы можете использовать «Блокнот», который является одной из встроенных стандартных программ.
  • На Mac вы можете использовать TextEdit. Сначала вы должны открыть меню «Настройки» в TextEdit и в разделе «Новый документ» выбрать «Простой текст». После этого вы можете начать процесс создания нового текстового документа TextEdit для вашего файла .htaccess.
  • На Linux вы можете использовать любой из многочисленных текстовых редакторов, доступных для вашего дистрибутива – как консольных (vi, nano), так и графических (к примеру, gedit).

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

Загрузка файла .htaccess на сервер

Для корректного редиректа через .htaccess файл должен быть загружен именно в тот каталог на сервере, для которого вы хотите задать настройки перенаправления. Как правило, это ваш каталог HTML-файлов (/var/www/vhosts/example.com/httpdocs/), хотя вы можете загрузить его и в любой подкаталог на вашем сервере.


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

На этом этапе файл может стать невидимым для вашего FTP-клиента, поскольку теперь он имеет формат системного файла. Многие клиенты FTP позволяют просматривать скрытые файлы и папки – рекомендуется включить эту функцию. Для получения инструкций по ее включению обратитесь к документации своего клиента.

Проверяем работу .htaccess

Наиболее простым способом проверить, обрабатывает ли веб-сервер ваш файл .htaccess, является его намеренное повреждение.

Отредактируйте файл .htaccess таким образом, чтобы первая строка начиналась со слова Test:

Test

# Установить главную страницу

DirectoryIndex page.html page.txt …

Теперь, если вы перезагрузите главную страницу своего сайта, вы увидите следующую ошибку (на фото ниже).

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

Немного о приоритетах редиректа .htaccess

Правила .htaccess являются рекурсивными. То есть директивы, написанные в файле /home/user/sitename_html/.htaccess будут применяться и к этому каталогу, и к его дочерним папкам за исключением случаев, если какое-то конкретное правило отменяется с помощью директивы в файле .htaccess, находящемся в дочернем каталоге.


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

Аналогичным образом файлы .htaccess нижнего уровня переопределяют настройки PHP в файлах vhost.conf и php.ini на более высоких уровнях, если только переопределение явно не запрещено для этих файлов.

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

Редирект .htaccess: основные виды

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

301: редирект на постоянной основе

Это наиболее распространенный тип переадресации и, скорее всего, именно тот, который вы будете чаще всего настраивать. В файле .htaccess 301 редирект страницы указывает, что ее старый URL-адрес (перенаправляемый URL-адрес) больше не используется.

302: временный редирект


Редирект 302 указывает, что старый URL-адрес страницы временно отключен, но будет восстановлен в ближайшее время. Для сервера Apache это правило перенаправления используется по умолчанию.

Таким образом, перед тем как настраивать редирект .htaccess, нужно определиться, постоянным или временным будет перенаправление. Для примеров в данной статье мы будем использовать редирект 301.

Примеры сценариев перенаправления

Ниже приведены наиболее распространенные примеры редиректа .htaccess.

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

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

На Windows сделайте следующее:

  1. Найдите и откройте файл .http.conf. Он находится в каталоге, в который вы установили Apache.

  2. Создайте резервную копию http.conf, чтобы в случае необходимости восстановить файл, если вы допустите какие-то ошибки.

  3. Найдите в файле строку #LoadModule rewrite_module modules/mod_rewrite.so и раскомментируйте его (уберите знак #).

  4. Найдите блок, заключенный в тэги <directory> и замените его на <directory/> Options All AllowOverride All </directory>.

  5. Отыщите все упоминания «AllowOverride None» и везде замените их на «AllowOverride All».

  6. Перезапустите веб-сервер и ваш браузер.


На Linux достаточно выполнить в терминале:

sudo a2enmod rewrite

Эта команда запустит модуль или выдаст уведомление о том, что модуль уже запущен. Чтобы привести в действие новые изменения, перезапустите Apache командой в терминале:

sudo service apache2 restart

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

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

Redirect 301 /retiredpage.html http://www.example.com/newpage.html

2. Переадресация папки (со всем содержимым):

RedirectMatch 301 ^/olddir/ http://www.yourdomain.com/newdir/

3. Редирект страницы в .htaccess с удалением WWW:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.sitename.com$ [NC]

RewriteRule ^(.*)$ http://sitename.com/$1 [L,R=301]

4. Перенаправление с добавлением WWW:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www.samplehost.com$ [NC]

RewriteRule ^(.*)$ http://www.samplehost.com/$1 [L,R=301]

5. Редирект на другой домен в .htaccess (перенос сайта целиком):


RedirectMatch 301 ^(.*)$ http://www.yoursite.com

6 .htaccess-редирект файлов HTML на PHP-файлы:

RedirectMatch 301 (.*).html$ http://www.examplesite.com$1.php

7. Переадресация страниц с добавлением HTTPS:

RewriteCond %{HTTPS} off

RewriteRule (.*) https://%{SERVER_NAME}/$1 [R=permanent,L]

8. Заменить все прописные буквы в URL-адресе на строчные:

<IfModule mod_rewrite.c>

RewriteMap lc int:tolower

</IfModule>

Данный фрагмент кода необходимо добавить в httpd.conf вашего веб-сервера. После этого требуется открыть файл .htaccess и внести:

RewriteEngine On

RewriteCond %{REQUEST_URI} [A-Z]

RewriteRule . ${lc:%{REQUEST_URI}} [R=301,L]

9. Использование регулярных выражений. Правила редиректа часто содержат символы, которые складываются в регулярные выражения. Благодаря этому сервер точно знает, что вы хотите изменить в URL. Однако регулярные выражения могут быть сложными для понимания с первого взгляда. Вот некоторые общие элементы, которые вы можете увидеть и использовать в своих правилах перезаписи URL, а также конкретные примеры их использования:

  • ^ : начало заменяемой строки;

  • $ : конец заменяемой строки.

Пример: регулярное выражение ^folder1$ дает сигнал найти и заменить текст «folder1» внутри ссылки.

  • . : любой символ, не являющийся пробелом (например, a, B, 3);

  • * : указывает, что предшествующий текст может повторяться любое число раз;

Пример: регулярное выражение ^uploads.*$ позволяет заменить текст «uploads2009», «uploads2010» и так далее;

Регулярное выражение ^.*$ обозначает «найти что угодно». Оно полезно в том случае, если вы не знаете, что пользователь может ввести в тексте URL.

  • () : выделяют фрагмент текста, который должен быть использован в правиле в качестве значения переменной $1. Это необходимо, к примеру, для обработки запросов к конкретным файлам, которые должны быть одинаковыми и для старой, и для новой версии URL.

Ошибка 404 Not Found

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

Распространенной является ошибка 404 Not Found, возникающая при переадресации. В этом случае необходимо внимательно изучить URL, сформированную в адресной строке. Существует ли нужный файл в новом местоположении на сервере, заданном правилом переадресации? Вам может потребоваться скопировать файлы из вашего старого местоположения в новое место, либо сделать правило перенаправления более широким, чтобы в случае отсутствия нужного файла по ссылке происходило перенаправление на главную страницу сайта.

Если же URL-адрес просто неверен (например, http://example.com/folder1//file.html — обратите внимание на два слэша), вам нужно пересмотреть синтаксис правила переадресации.

Бесконечный URL, таймаут или цикл

Если формирующийся при перенаправлении URL-адрес слишком длинный, либо страница слишком долго не загружается, либо ваш браузер дает сообщение об ошибке перенаправления, скорее всего, несколько правил переадресации конфликтуют между собой.

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

Кроме того, можно включать перенаправления внутри HTML и PHP-страниц. Проверьте страницу, с которой происходит проблема, на предмет внутренних переадресаций.

Добавление [L] после правила перенаправления может помочь в некоторых случаях, поскольку данный флаг командует серверу прекратить попытки перенаправления URL-адреса после применения правила.

Как сделать редирект без .htaccess

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

Откройте текстовым редактором конфигурационный файл vhost (httpd.conf), который обычно располагается в каталоге /etc/apache2/sites/sitename.

Выделенный фрагмент образца файла демонстрирует перенаправление:

<VirtualHost *:80>

ServerName www.mysite.com

ServerAlias www.mysite.com

Redirect / http://mysite.com

</VirtualHost>

Конфигурация, приведенная выше, перенаправляет все запросы на домен без субдомена WWW.

Чтобы перенаправить все запросы на домен с субдоменом WWW, измените конфигурацию, как показано ниже.

<VirtualHost *:80>

ServerName anywebsite.com

ServerAlias anywebsite.com

Redirect / http://www.anywebsite.com

</VirtualHost>

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

fb.ru

Памятка по используемым символам и обозначениям

Строчка 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

Полезные советы

  • Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
  • Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы — вес исходной страницы может не передаться.
  • При составлении файла .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

Что такое 301 редирект и где он может пригодится

301 редирект — это некое автоматическое перенаправление с одной страницы на другую, причем при этом редиректе передается все: вес страницы, тИЦ, PR, вес входящей ссылочной массы и прочее. То есть происходит склеивание старой страницы с новой. Пользователь, попавший на старую страницу, автоматически «перебросится» на новую.

Где может пригодится 301 редирект:

  • Решили вы переехать на новый домен. В таком случае, наиболее безболезненно это можно сделать как раз с помощью данного вида перенаправления.
  • Был у вас сайт на каком-нибудь движке (допустим, Joomla). Страницы имели адрес site.ru/?id=1245. На WordPress та же самая страница у вас выглядит так site.ru/rubrika/post.html. И, чтобы не потерять показатели старых страниц, необходимо сделать 301 редирект на новые страницы.
  • Ваш сайт доступен по 2-м адресам, например с www и без www. В таком случае тоже нужно прописать 301 редирект.
  • Контент на старой странице нужно перенести на новую страницу. Или, например, 3 маленьких статьи нужно объединить в одну большую. В подобных случаях тоже лучше перенести на 1 из 3-х URL, а на оставшихся двух прописать редирект 301.

к оглавлению ↑

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

Я предпочитаю делать 301 редирект с помощью файла htaccess. При чем он существует не только на WordPress сайтах, поэтому данный метод перенаправления — универсальный. Файл .htaccess лежит в корне сайта:

301 редирект

Редактируется данный файл с помощью текстового редактора, лучше использовать Notepad++.

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

к оглавлению ↑

С WWW на без WWW (и наоборот)

Сайт должен быть доступным только по одному варианту: либо с WWW, либо без WWW. Неправильно, если сайт «отдается» по двум вариантам. Нужно оставить только один.

Если сайт молодой, выберите лучше без WWW, если же старенький, то лучше остановиться на том варианте, который проиндексирован. Бывает так, что в Яндексе проиндексировано с WWW, а в Google без WWW, в таком случае выберите тот вариант, который «вылез» в наиболее приоритетной поисковой системе для вас.

Поймите, www.site.ru и site.ru для поисковых систем это 2 разных сайта, поэтому должен быть доступен только 1 вариант! С WordPress обычно с этим проблем нет, там по умолчанию доступен только 1 вариант, а вот на других движках часто можно видеть, что сайт доступен и так, и так.

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

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

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

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

к оглавлению ↑

С одной страницы на другую с помощью htaccess

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

Redirect 301 /staraya-stranica.html http://site.ru/novaya-stranica.html

к оглавлению ↑

С index.php (index.html) на корень (главную страницу)

На некоторых движках можно встретить, что главная страница сайта также доступна по адресу: site.ru/index.php. Это неправильно. Нужно, чтобы данная страница отдавала 301 редирект на главную страницу, вот как это делается (не забываем переписывать «site» на свой домен).

Если c index.php:

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

Если с index.html:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.html HTTP/  RewriteRule ^index.html$ http://site/ [R=301,L]

к оглавлению ↑

С http на https:

Если вам нужно прописать 301 редирект с http на безопасный протокол httpS, используйте вот этот код:

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

к оглавлению ↑

С одной категории (директории/папки) на другую

Бывает необходимость, когда все страницы определенной категории, нужно перенаправить по другому адресу, вот код:

RedirectMatch 301 ^/category-old/(.*) /category-new/$1

к оглавлению ↑

С одного домена на другой

Если вы вдруг переехали на новый домен, то нужно в htaccess старого домена прописать это:

RewriteEngine On  RewriteCond %{HTTP_HOST} old-domen.ru  RewriteRule (.*) http://new-domen.ru/$1 [R=301,L]

Также в robots.txt обязательно укажите в директиве host новый адрес сайта.

к оглавлению ↑

301 редирект на WordPress с помощью плагина Simple 301 Redirects

Если сайт клиента на WordPress и он сам хочет в некоторых местах прописать 301 редиректы, я ставлю плагин Simple 301 Redirects. Да и для новичков он хорошо подойдет. Плагин очень прост в использовании и все делается в привычной админке WordPress, поэтому данный способ может показаться кому-то более легким.

  1. Устанавливаем плагин Simple 301 Redirects.
  2. Захотим в админке «Параметры» -> «301 Redirects»:
    301 редирект в WordPress
  3. Там уже, как и в случае с файлом htaccess, нужно прописать старый URL (без домена) и новый с доменом:
    301 редирект htaccess
  4. Также можно прописать редирект всех страниц в категории. То есть, допустим, было у нас /7-1-products/ и мы хотим сделать /products/, то просто сначала там же на странице плагина ставим галочку перед «Use Wildcards?»:
    Как сделать 301 редирект
  5. И уже потом можно прописать подобное, используя «звездочку»:
    301 редирект: как настроить
  6. В итоге, все статьи, которые находились в начальной рубрике будут переадресовываться на новый вид категорий.

к оглавлению ↑

Вывод

После того, как пропишете 301 редирект, обязательно проверьте сайт на работоспособность. Одна маленькая ошибка может сделать весь ваш сайт недоступным. Обязательно перед изменениями файла htaccess делайте его резервные копии, ну либо пользуйтесь CTRL+Z, чтобы вернуть файл в исходное положение.

Еще: учтите, что вес по 301 редиректу передается не сразу. Да, в Google склейка происходит быстрее, но в Яндексе это все происходит медленно. Нужно ждать обычно от 1 до 3-х месяцев.

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

wpnew.ru

Что такое редиректы и зачем они нужны

Редирект — перенаправление пользователя с одного URL на другой. Например, при переходе по ссылке http://texterra.ru/blog/ браузер автоматически перенаправляет пользователя на URL https://texterra.ru/blog/.

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

Вот примеры использования редиректов:

  • Перенаправление с http на https. Пример указан выше.
  • Перенаправление с URL с www на URL без www и наоборот. При переходе по ссылке https://tinkoff.ru браузер перенаправляет пользователя на https://www.tinkoff.ru. При переходе по ссылке https://www.vc.ru браузер перенаправляет посетителя на https://vc.ru/.
  • Переезд сайта на другой домен. Пару лет назад коллеги из популярного издания отказались от названия «Цукерберг позвонит» и настроили редирект с адреса http://siliconrus.com на https://vc.ru/.
  • Перенаправление трафика с одной страницы сайта на другую. Например, если в интернет-магазине нет какого-то товара, он может перенаправить трафик на страницу похожего продукта.
  • Перенаправление пользователей на мобильную версию сайта. Если владелец ресурса использует для адаптации к мобильному трафику только мобильную версию сайта, он настраивает редирект мобильных пользователей с www.example.au на www.m.example.au.

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

Какие бывают виды редиректов и когда их используют

Для пользователя все редиректы одинаковы: при попытке перейти по одному URL они попадают на другой URL. Обычно интернет-серферы даже не замечают, что браузер перенаправил их с одного адреса на другой.

Браузеры и роботы поисковых систем определяют вид редиректа по коду состояния HTTP. Перенаправления могут иметь разный HTTP-статус: 301, 302, 303, 307. Рассмотрим каждый подробнее.

Редирект 301

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

Если вы используете редирект 301, авторитет и ссылочный профиль старой страницы передаются на новую. Например, не бойтесь потерять вес входящих ссылок при переводе сайта на безопасный протокол соединения. Корректный редирект 301 с http на https сохраняет эту характеристику ресурса и его конкретных страниц.

Редирект 302

В HTTP 1.0 статус 302 использовался для обозначения временного перемещения запрошенного ресурса на новый адрес. В HTTP 1.1 редирект 302 обозначает статус «Найдено» или Found. То есть ресурс существует, но владелец на некоторое время переместил его на новый адрес. Редирект 302 не передает авторитет и ссылочный профиль донора акцептору.

В HTTP 1.1 для временного перенаправления предложены редиректы 303 и 307. Это связано с некорректной обработкой статуса 302 в некоторых браузерах.

Вместо 302 для временного перенаправления лучше использовать редиректы 303 и 307.

Редиректы 303 и 307

В HTTP 1.1 статус 303 предложен вместо редиректа 302. Значение кода – See Other или «Смотрите другой ресурс». Для нового запроса браузер должен использовать метод GET. Применяйте редирект 303, когда у вас нет адекватного ответа на запрос пользователя, но имеется более или менее подходящая замена.

Редирект 303 подходит, когда на целевой странице есть формы. В этом случае важно, чтобы браузер делал запрос безопасным методом GET.

Статус 307 также используется вместо редиректа 302. Значение кода – Temporary Redirect или «временное перенаправление». Браузер не должен менять метод нового запроса. Запросы безопасными методами GET и HEAD выполняются автоматически. Запросы небезопасными методами, например, POST, выполняются с подтверждением пользователя.

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

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

Какие типы редиректов бывают

Редиректы классифицируются по способу реализации. Настроить перенаправление можно через файл .htaccess или nginx.config, средствами PHP, HTML, JavaScript. Подробнее о каждом типе ниже.

Что такое htaccess-редирект

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

Чтобы настроить перенаправление, внесите изменения в файл .htaccess. Для доступа к файлу воспользуйтесь FTP-клиентом, например, FileZilla. В настройках программы в меню «Сервер» включите принудительное отображение скрытых файлов. Файл .htaccess находится в папке с названием доменного имени ресурса в каталоге public_html.

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

В интерфейсе FTP-клиента FileZilla слева доступны файлы и папки локального компьютера, а справа — файлы и папки удаленного сервера.

Также доступ к файлу .htaccess можно получить через панель управления хостингом. В cPanel откройте раздел интерфейса «Файлы – Диспетчер файлов».

В настройках диспетчера включите отображение скрытых файлов.

Скачайте файл на компьютер и отредактируйте. Также файл можно редактировать через cPanel.

Чтобы отредактировать файл .htaccess, откройте его в блокноте. Добавьте код редиректа. Сохраните изменения и загрузите файл на сервер.

О коде редиректов и настройках конкретных перенаправлений пойдет речь ниже.

PHP-редиректы

PHP-редирект работает на уровне сервера. Этот способ перенаправления считается менее предпочтительным по сравнению с редиректом через файл .htaccess, так как он работает медленнее. Но в некоторых случаях предпочтительнее использовать этот тип редиректа.

Например, если на сайте есть десятки страниц, для которых нужно прописать редирект, а также десятки страниц, для которых редирект не нужен, лучше настраивать перенаправления с помощью PHP.

Скачайте на жесткий диск файл index.php или откройте его для редактирования в диспетчере файлов панели управления хостингом. Файл находится в корневой папке сайта. Там же находится файл .htaccess.

Добавьте в файл index.php код редиректа. Сохраните изменения и загрузите файл на сервер.

JavaScript-редирект

Редирект с помощью кода JavaScript выполняется на стороне браузера, а не на стороне сервера. Чтобы посетитель попал со старой страницы на новую, скрипт редиректа должен полностью загрузиться в обозревателе. Поэтому JavaScript-редирект – более медленный способ перенаправления, чем серверные редиректы. Еще одна проблема — автоматическое перенаправление не сработает, если пользователь отключил в браузере JavaScript.

Тем не менее JavaScript-редиректы в некоторых случаях удобны. Например, их можно использовать для перенаправления с задержкой. Вы можете написать на старой странице сообщение вроде «Мы переехали на новый сайт, сейчас вы будете автоматически туда перенаправлены». Через несколько секунд пользователь автоматически попадет на новую страницу.

Чтобы реализовать перенаправление с помощью JavaScript, добавьте код редиректа между тегами <head> и </head> страницы, с которой нужно перенаправить пользователей. На сайтах под управлением WordPress это можно сделать с помощью бесплатного плагина Per page add to head.

Сохраните изменения на странице и проверьте, как работает редирект.

HTML-редирект

Этот тип перенаправления также работает на стороне браузера. Чтобы перенаправление сработало, обозреватель должен загрузить соответствующий HTML-код: метатег refresh. Поэтому этот тип редиректов работает медленнее перенаправлений на уровне сервера.

Чтобы реализовать редирект, добавьте код между тегами <head> и </head> страницы, с которой хотите перенаправить трафик.

Сохраните изменения и проверьте, как работает перенаправление.

Промежуточный итог: предпочитайте серверные редиректы, так как они удобнее для пользователей. В большинстве случаев перенаправление лучше настраивать через конфигурационный файл .htaccess для серверов на Apache и nginx.config для серверов на Nginx.

Где взять код редиректа

Если у вас нет соответствующей подготовки и знаний, есть два варианта. Можно обратиться к специалисту или воспользоваться онлайн-генератором кода. Подборка сервисов ниже сэкономит вам время и деньги:

  • 301 Redirect Code Generator. Генерирует код редиректа для Apache, ASP и ASP.NET. Также создает код JavaScript и HTML-перенаправлений.
  • Seomagnifier. Создает код редиректа 301 с домена с www на домен без www и наоборот.
  • 301 Redirect Code Generator Tool. Создает редиректы со страницы на страницу, а также с домена без www на домен с www. Генерирует PHP-код, перенаправления для серверов на ASP и ASP.NET, HTML- и JavaScript-перенаправления.
  • Генератор файла .htaccess. Создает код редиректов со страницы на страницу, а также между разделами сайта, генерирует скрипты перенаправлений с домена с www на домен без www.
  • Универсальный генератор кода перенаправлений для .htaccess. Можно выбрать сценарий редиректа, указать URL и сгенерировать код.
  • Генератор редиректов 301. Создает код перенаправлений для серверов на Apache, ASP, ASP.NET, а также код HTML- и JavaScript-редиректов.
  • Генератор перенаправлений от Brontobytes. Поможет настроить редирект со старого домена на новый, изменить адрес отдельных страниц и разделов ресурса, настроить перенаправление с домена без www на домен с www.
  • Пользователям серверов на Nginx будет полезен конвертер кода. Он трансформирует редиректы для .htaccess в перенаправления для nginx.config.

Как делать редиректы: популярные примеры

В этом блоке представлены наиболее популярные редиректы. Инструкции помогут вам настроить перенаправления без обращения к техническим специалистам.

Как сделать редирект с http на https

Часто владельцы сайтов сталкиваются с необходимостью сделать серверный редирект при переводе сайта на безопасный протокол соединения. Чтобы реализовать перенаправление, выполните следующие действия:

  1. Скачайте конфигурационный файл на жесткий диск или откройте его для редактирования в панели управления хостингом.
  2. Сгенерируйте код редиректа с помощью одного из предложенных выше сервисов.
  3. Добавьте код в файл, сохраните изменения и загрузите .htaccess на сервер.

Корректно перевести сайт на безопасный протокол помогут следующие ресурсы:

  • Рассказ нашего маркетолога Тимура Фехрайдинова об опыте и особенностях перевода на безопасный протокол сайта «Текстерры».
  • Техническая инструкция по переводу на https сайта на WordPress, включая тактику работы с Google Search Console и «Яндекс.Вебмастер».
  • Плагин для WP Really Simple SSL. За минуту решает все технические задачи, связанные с установкой SSL-сертификата и переводом сайта на безопасный протокол.

Как сделать редирект с или на www

Подробную инструкцию по перенаправлению с домена без www на домен без www через файл .htaccess читайте в статье о зеркалах сайтов. Если хотите, выполните этот же редирект с помощью php. Действуйте так:

  1. Загрузите на жесткий диск файл index.php.
  2. Сгенерируйте код редиректа.
  3. Вставьте код в файл, сохраните изменения и загрузите index.php на сервер.
  4. Укажите основной URL в настройках сайта. В WordPress это можно сделать в меню «Настройки – Общие».

Проверьте, как работает перенаправление. На иллюстрации ниже видно, что до настройки редиректа сайт был доступен по двум URL. После изменения файла index.php ресурс доступен по одному адресу.

Как настроить перенаправление с одной страницы

Чтобы настроить редирект с одной страницы на другую, отредактируйте файл .htaccess или index.php: добавьте в него сгенерированный код редиректа. Если сайт работает на WordPress, воспользуйтесь для настройки редиректов плагинами:

  • Simple 301 Redirects. О настройках читайте в статье про зеркало сайтов.
  • Redirection. Инструкция по настройке смотрите в нашей статье «Лайфхаки для пользователей WordPress».
  • Redirect. Добавляет блок настройки редиректов на страницу редактирования публикаций.

Как настроить редирект при смене домена

При переезде на новый домен перенаправление настраивается так же, как редиректы с http на https или с домена с www на домен без www. Изменения можно внести через файл .htaccess или index.php.

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

Добавьте код в файл .htaccess и сохраните изменения.

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

Редирект папки (каталога, директории) можно настроить с помощью файлов .htaccess или index.php. Настройка перенаправлений может понадобиться, если в URL страниц отображаются названия директорий.

Например, в блоге о книгах URL может выглядеть так: https://exampleblog.ru/klassica/idiot. Автор создает отдельный каталог для русской классики и хочет, чтобы URL выглядел так: https://exampleblog.ru/russkaya-klassica/idiot. В .htaccess нужно добавить такой код:

RedirectMatch 301 ^/klassica/(.*)$ /russkaya-klassica/$1

Частные случаи: редирект слэша и редирект расширения

Одни владельцы сайтов предпочитают URL со слэшем в конце, а другие без слэша: https://exampleblog.ru/page/ и https://exampleblog.ru/page соответственно. Поисковые системы считают варианты со слэшем и без него разными URL. Поэтому важно выбрать предпочтительную структуру сетевых адресов и настроить перенаправления.

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

Чтобы настроить перенаправления с адреса с расширением на адрес без расширения, сгенерируйте код и добавьте его в конфигурационный файл. Редирект с URL с расширением .html на URL с расширением .php выглядит так:

RewriteEngine on

RewriteRule index.html index.php [NC,R]

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

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

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

  • Чекер PrCy.
  • Redirect Checker.
  • Redirect Check.

Чекеры показывают вид редиректа и статус ответа сервера при переходе на новый адрес.

Сделать редирект просто

Для этого в первую очередь выберите вид редиректа. В большинстве случаев подходит перенаправление 301 или постоянный редирект. Иногда для временного перенаправления стоит использовать редирект 303 и 307.

Затем выберите тип редиректа. Быстрее всего работают серверные редиректы, которые настраиваются с помощью конфигурационных файлов .htaccess для серверов Apache и nginx.config для серверов Nginx. Также можно настроить PHP-редирект с помощью файла index.php. JavaScript- и HTML-редиректы работают медленнее, поэтому используйте их в исключительных случаях.

Сгенерируйте код редиректа с помощью одного из предложенных в статье сервисов и добавьте его в конфигурационный файл или в файл index.php. Проверьте корректность редиректа вручную или с помощью веб-сервиса.

kak-sdelat-redirekt-podrobnyy-obzor-dlya-gumanitariev

texterra.ru

Самый простой пример редиректа: с сайта на сайт

Redirect / www.example.com

www.example.com — сайт, на который мы перенаправляем запрос пользователя.

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

Redirect /semantica semantica.in/

Redirect /semantica/blog semantica.in/blog

Redirect 301 /kernel semantica.in/

 

Что всё это значит:

1 строка — при обращении к странице www.example.com/semantica будет открываться сайт semantica.in/

2 строка — при обращении к http://www.example.com/semantica/blog будет открываться semantica.in/blog

3 строка — веб-сервер будет отдавать код 301 о постоянном переезде на новый URL

 

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

 

 

Сложные редиректы

Для сложных редиректов существует модуль mod_rewrite — это средство преобразования URL-адресов, использующее регулярное выражение. Для редиректа используются три важные директивы: RewriteCond, RewriteRule и RewriteEngine.

  1. RewriteEngine включает или выключает работу механизма преобразования:

Положение on-off включает и выключает работу модуля.

2. RewriteCond — определяет условие какого-либо правила, при котором происходит преобразование. Сразу после директивы чаще всего идут переменные %{HTTP_HOST} и %{REQUEST_URI}, которые означают адрес сервера (например, example.ru) и ресурс, запрошенный в строке HTTP-запроса, соответственно.

3. RewriteRule — идёт после одного или нескольких RewriteCond. Это правило преобразования URI, которое применяется только при условии выполнения RewriteCond.

Синтаксис директивы RewriteRule выглядит следующим образом:

 

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

Метасимволы используются для задания групп символов и меток в шаблоне:

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

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

  • NC — (nocase) отключает проверку регистра символов.
  • R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY).
  • L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.

 

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

Теперь, зная эти правила, мы можем попытаться самостоятельно сделать редирект с помощью htaccess.

  1. Редирект .htaccess на другую страницу
Redirect 301 /old-post.html http://new-site.ru/new-post.html

 

  1. Редирект .htaccess с www на без www
  RewriteEngine on    RewriteCond %{HTTP_HOST} !^site.ru$ [NC]    RewriteRule ^(.*)$ site.ru/$1 [R=301,L]  

 

  1. Редирект .htaccess с без www на www
  RewriteEngine on    RewriteCond %{HTTP_HOST} !^www.site.ru$ [NC]    RewriteRule ^(.*)$ www.site.ru/$1 [R=301,L]  

где site.ru — ваше доменное имя.

 

  1. Редирект с index.php (html) на главную страницу
  RewriteEngine on    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.(php|html|htm) HTTP/    RewriteRule ^(.*)index.(php|html|htm)$ $1 [R=301,L]  

 

  1. Редирект со слешем на без слеша
  RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} ![^/]$  RewriteRule ^(.*)/$ /$1 [R=301,L]  

 

  1. Редирект со страниц без слеша на слеш
  RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} !/$  RewriteRule ^(.*[^/])$ /$1/ [R=301,L]  

 

  1. Редирект всех страниц одного домена на главную другого домена
  RewriteCond %{REQUEST_URI} (.*)  RewriteRule ^(.*)$ http://site.ru/ [L,R=301]  

 

  1. Редирект с http на https через. htaccess
  RewriteCond %{HTTPS} !=on  RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]  

 

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

 

  1. Избавление от дублей страниц

Если вы заметили, что к адресу основной страницы приклеивается что-то вроде &sa=123 456 или &crw=123 456 и подобное, просто замените буквенную часть в следующем коде

  RewriteCond %{REQUEST_URI} ^(.*)&sa=  RewriteRule ^(.*)&sa=(.*)$ $1 [R=301,L]  

Пример: объясняем на пальцах

Как с помощью 301 редиректа сделать так, чтобы по запросу site.ru/category/art1/zapis/ в строке адреса было site.ru/zapis/, то есть /category/art1 вырезалась бы из строки, но после вырезания строки показывалось содержимое site.ru/category/art1/zapis/?

Легко:

    RewriteCond %{ENV:REDIRECT_STATUS} ^$  RewriteRule ^category/art1/zapis/$ http://%{HTTP_HOST}/zapis/ [R=301,L]  RewriteRule ^zapis/$ /category/art1/zapis/ [L]    

А теперь давайте подробнее разберем, что же тут написано и что вообще происходит.

Как известно mod_rewrit на apache постоянно просматривает список правил, пока URL можно хоть как-то изменить.
И не редко получаются бесконечные циклы.

Чтобы ограничить цикл выполнения правил одной итерацией, можно использовать конструкцию из первой строки. Она предает apache статус был ли выполнен редирект или нет и если да, то пропустить следующие правила. К слову, на nginx эта строка не нужна.

Вторая строка делает 301 редирект с www.site.ru/category/art1/zapis/ на www.site.ru/zapis/
Третья же строка говорит серверу, что если адрес вида www.site.ru/zapis/, то надо показывать то, что находится по адресу www.site.ru/category/art1/zapis/

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

 

 

  1. Принцип «от меньшему к большему»: располагайте редиректы от частных к более глобальны. Т. е. переадресация со страницы на страницу будет выше, чем переадресация с без www на www.
  2. Избегайте последовательных — двойных, тройных — редиректов. Один редирект перенаправляет пользователя только один раз.
  3. Проверьте HTTP заголовки и статусы ответа сервера, чтобы убедиться в правильности работы редиректа.

 

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

 

Когда редирект необходим

  1. Вы переехали на другой домен: и вам логично не хочется потерять своих клиентов — настоящих и потенциальных, а также есть необходимость передать вес прошлого сайта на новый.
  2. Хотите склеить зеркала: у вас несколько доменных имён с разным написанием бренда и вы перенаправляете всех посетителей на основной сайт.
  3. Страница сменила свой адрес: структура вашего сайта была реорганизована и вы пытаетесь предотвратить возможный беспорядок.
  4. Хотите избавиться от дублей страниц или копии сайта: не стоит относится к дублям как чему-то безвредному и незначительному. С дублями вы теряете в весе и сдаете позиции конкурентам, а так же дублирование контента может привести к штрафам от поисковых систем.

 

 

В каких случаях не нужно использовать редирект?

  1. Вы временно переезжаете на новую страницу: для этого есть 302 и 307 код, это гарантия того, что не произойдёт склейки страниц и оригинальная страница не выпадет из поисковой выдачи.
  2. Вы переезжаете из-за проблем со старым доменом: если у вас есть баны, фильтры и штрафы, то при склейке к вам перейдет не только ТИЦ и PR, но и все беды, от которых вы бежали.

semantica.in


You May Also Like

About the Author: admind

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector