Редирект 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

Редиректы в зависимости от времени

Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?

Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения <STRING, >STRING и =STRING мы можем производить редиректы зависящие от времени:

RewriteEngine on  RewriteCond   %{TIME_HOUR}%{TIME_MIN} >0700  RewriteCond   %{TIME_HOUR}%{TIME_MIN} <1900  RewriteRule   ^foo.html$             foo.day.html  RewriteRule   ^foo.html$             foo.night.html

Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.

Убираем у всех запросов вначале «WWW.»

RewriteEngine on    # оглашаем, что хотим использовать mod_rewrite  RewriteCond %{HTTP_HOST} ^www.(.*) [NC]  RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]

Меняем расширение .html на .php

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

AddHandler application/x-httpd-php .html

Этот прием можно использовать и для других расширений файлов:

AddHandler application/x-httpd-php .xml  AddHandler application/x-httpd-php .asp

Данный материал взят с сайта CMS-Joomla-Help.com!

joomix.org

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

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

Базовые возможности htaccess

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

1. Страницы ошибок
При возникновении технических неполадок с хостингом или сайтом, выдается один из стандартных кодов состояния HTTP. Воспользовавшись директивой ErrorDocument, можно задать автоматическое перенаправление пользователей к соответствующим html-документам. При этом htaccess будет выглядеть следующим образом:

Например:
ErrorDocument 404 /errors/404.html

Наиболее распространенные ошибки:
403 — запрет на доступ к файлу/странице
404 — запрашиваемый документ/ссылка отсутствует, либо не корректный URL.
500 — внутренняя ошибка сервера.

2. Запрет просмотра для определенных User-Agent
Абсолютно каждое интернет-приложение, будь то браузер или поисковый робот, имеет особый идентификатор — User-Agent. Зная его значение, можно заблокировать нежелательные программы. В СЕО указанный прием используется для запрета индексации и защиты от различных сканеров. Также можно весьма эффективно противостоять спаммерам. Переадресация htaccess такова:

Выше мы запретили доступ к площадке условным спам-ботам 1 и 2. При попытке сканирования, будет выводиться стандартная 403 ошибка.
Примечание: указанная выше методика, несмотря на все преимущества, имеет один недостаток — требуется знать User-Agent утилиты, которую вы хотите запретить. Спамеры стараются обойти подобную защиту, оставляя его пустым, либо размещая там случайную информацию. Противодействовать вредоносным программам в этом случае можно с помощью такого кода:

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

3. Запрет хотлинков
Термин “хотлинк” обозначает подключение к веб-странице файла (чаще всего, изображения), расположенного на сторонних ресурсах. Мало того, что у вас, фактически, воруют контент — при этом создается еще и дополнительная нагрузка на проект. Бороться с этим можно, настроив в htaccess проверку переменной HTTP_REFERER. Если ее значение не совпадает с именем сервера, на котором размещен оригинал, изображение будет подменяться “заглушкой” (например, картинкой с вашим копирайтом):

4. Технические работы
Если планируются глобальные изменения (редизайн, или добавление нового функционала), возникает необходимость установки “заглушки”. Штатные средства большинства движков закрывают сайт для всех, что весьма неудобно. Однако настроенный через htaccess редирект позволяет оставить проект доступным администратору, в то же время демонстрируя посетителям страницу с информацией о технических работах:

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

В первую очередь, стоит разобраться с файлами, которые практически никогда не изменяются (изображения, документы pdf, doc, видео):

Здесь для файлов с перечисленными расширениями мы установили заголовок Cache-Control, задав срок хранения в 1 год через переменную max-age. Вы можете уменьшить данный интервал, однако учтите — время задается в секундах. Private указывает, что кэширование необходимо осуществлять только на стороне пользователя, минуя прокси.

Правило для скриптов, стилей, xml лучше всего прописать отдельно, снизив время до пары дней:

Динамические страницы лучше исключить из кэша вообще:

Также можно задать период в 30-60 секунд (это практически не создаст проблем посетителям, однако поможет снизить нагрузку на Апач в прайм-тайм).

6. Управляем индексированием
Поисковики склонны своевольничать, не оглядываясь на инструкции robots.txt. Особенно часто этим грешит Google, способный проиндексировать даже закрытую страницу, перейдя на ресурс по внешнему линку. Частично проблема решается через мета-тег robots, вот только его можно указать лишь для html-документа. Если же от цепких лап «паука» требуется скрыть файл, стоит обратиться к htaccess, благо X-Robots-Tag поддерживает все существующие директивы индексирования:

В примере выше мы разрешили поисковым роботам индексировать файлы с расширениями .txt, .doc, pdf, тем не менее, заблокировав возможность переходить по гиперссылкам, создавать сниппеты, а также сохранять информацию в кэш.

7. Сообщаем Гуглу о мобильной версии сайта
Если веб-ресурс генерирует различный код в зависимости от устройства пользователя, с которого осуществляется просмотр, а ссылки при этом не меняются, велик риск попасть под санкции Google (такое поведение может расцениваться как попытка подмены контента). Неприятностей можно избежать, прописав строчку:

Данная запись сообщает, что содержимое страницы варьируется в зависимости от User-Agent.

Настройка постоянного редиректа

Код состояния HTTP 301 указывает на то, что запрошенный документ навсегда сменил адрес, а текущий URL следует считать устаревшим. Это позволяет не только перенести весь заработанный вес (в том числе: Траст, PR, ТИЦ), но и автоматически переправить пользователя на корректную страницу.

Переадресация и приведение ссылок к ЧПУ

1. Со старого URL на новый
Самая простая переадресация htaccess может быть задана с помощью директивы Redirect, используемой модулем Apache — mod_alias. Выглядит запись таким образом:

Преимущество способа заключается в простом синтаксисе, недостаток — в том, что для перенаправления большого количества устаревших адресов, придется вручную прописывать каждый. Если же их число составляет десятки и сотни, лучше всего использовать mod_rewrite, который позволяет задавать redirect посредством регулярных выражений. Такой подход открывает широчайшие возможности для управления URL, в том числе создавать ЧПУ из автоматически сгенерированных ссылок. Для использования этого метода необходимо активировать (т.е. прописать в htaccess) не только сам модуль, но и опцию FollowSymLinks:

2. Склейка домена с www и без www
Можно сказать, что это — основы технического SEO, ведь именно данные правила помогают исключить множественные дубли контента и объединить вес входящих ссылок. Существует два различных решения, одно из которых привязано к конкретному домену, другое же является универсальным. Чем именно воспользоваться — дело вкуса. Синтаксис таков:

а) Переадресация домена с префиксом www на домен без www

Альтернатива такова:

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

То же самое, но без привязки к домену:

3. Лишние слэши и тире
Весьма распространенная болезнь CMS — доступность сайта по адресам со знаком «/» на конце и без. Проблему также способен решить 301 redirect в htaccess, причем возможны два варианта:

а) Если вы желаете получить URL вида https://tekseo.su, необходимо прописать:

б) Если, напротив, требуется получить линки в формате https://tekseo.su/, то:

Помимо этого, может наблюдаться появление лишних слэшей или тире (например, https://tekseo.su/category///page—1.html). 301 редирект в htaccess выглядит:

4. Избавляемся от index.php и index.html
Другая ситуация — дублирование урлов с index.php на конце. Побороть ее можно с помощью пары строчек:

Выше задан redirect 301 в htaccess для homepage. Аналогичным образом можно удалить index.php для любой другой категории:

5. Меняем домен
Если сайт переименован, стоит задать глобальную переадресацию. Сделаем перенаправление с tekseo.su и www.tekseo.su на http://new-tekseo.su/

6. Склейка доменов
При использовании алиасов, дабы исключить появление дублей, осуществляется склейка доменов. Сделать это можно посредством robots.txt, указав поисковым роботам основное зеркало, однако перенаправление является более надежным методом. Здесь задан редирект с tekseo.com и www.tekseo.com на tekseo.su:

7. 301 редирект ссылки с GET-параметром на другую динамическую
Достаточно нетривиальная задача, подобная необходимость может возникнуть при обновлении модулей, или радикальной переработке структуры размещенного контента. Разберем на следующем примере — ссылку вида /?option=mod_articles&pageid=title1 нужно переправить на /module/articles/?pageid=title1:

Другой случай из разряда казуистики: установив SEF-модуль на свой сайт, вы можете обнаружить, что он конфликтует с некоторыми расширениями, заботливо удаляя параметры из сгенерированных урлов. Если в целом новая система полностью вас устраивает, от нее не обязательно отказываться — достаточно прописать переадресацию в htaccess, передавая часть URL в виде GET-запроса (проще говоря, подставить вопросительный знак в нужное место ссылки):

Здесь мы сделали подмену исходного статического адреса http://www.tekseo.su/parametеr на динамический http://www.tekseo.su/?parametеr.

Формирование ЧПУ на уровне сервера

Создание человекопонятных урлов — одна из ключевых задач технической оптимизации веб-ресурсов. В отличие от примеров, приведенных выше, универсального рецепта здесь не существует. Прописывание автоматических ЧПУ в htaccess требует знания регулярных выражений. В нашем случае они будут использоваться для обнаружения тех или иных фрагментов ссылок и последующей их замены/удаления с целью получения SEF-конструкций. Для грамотного их построения применяются знаки препинания и специальные символы:
“^” — циркумфлекс, начало строки;
“$” — доллар, конец строки;
“.” — точка, любой единичный символ;
“*” — звездочка, любое количество символов, расположенных после указанного знака. Самостоятельно практически не используется;
“.*” — точка и звездочка, любое число любых символов;
“+” — плюс, аналог звездочки, однако предшествующий ему символ должен присутствовать хотя бы один раз;
“?” — знак вопроса, указывает, что стоящая перед ним конструкция (будь то единственный символ или группа) может отсутствовать (например, редирект 301 в htaccess, содержащий ^/page_1/?$ будет работать независимо от того, есть на конце слэш или нет);
“()” — круглые скобки, выделяют некую последовательность (запись формата (.*) обозначает группу из любого количества случайных знаков);
“[]” — квадратные скобки, любой указанный символ (^[0-9] будет означать, что в начале строки может располагаться случайная цифра от 0 до 9);
“{}” — фигурные скобки, указывают, сколько раз встречается символ или их сочетание (так, выражение [a-z]{3} значит, что строчные буквы латинского алфавита могут встречаться три раза);
“|” — вертикальная черта, логический оператор “or” (или), задает несколько условий (например, можно перечислить вероятные расширения файлов (jpg|jpeg|gif|bmp|png));
“” — обратный слэш, служит для экранирования служебных знаков, если они являются предметом поиска (то есть, сочетание «.» означает, что точка — значимый символ).

Еще одна важная деталь — флаги, идущие после кода htaccess redirect и заключенные в квадратные скобки. Нас интересуют следующие:

L — останавливает преобразования адреса сразу после выполнения строчки;
R= — определяет тип редиректа, если значение не указать, сервер по умолчанию выдаст код 302 (перемещен временно);
NC — независимо от регистра, позволяет обрабатывать урлы с заглавными и строчными буквами одним и тем же правилом;
S= — указывает количество правил, которые нужно пропустить;
N — сигнализирует о необходимости перезапуска, при этом обрабатывая результат предыдущего преобразования;
F — выводит ошибку 403 (доступ запрещен).

Теперь осталась самая малость — изучить директивы, переменные окружения Apache и опции, после чего вы сможете создавать редиректы htaccess самостоятельно. Строго говоря, из директив требуется знать только две основные:
RewriteCond — посредством нее задаются условия, при которых выполняется соответствующее правило;
RewriteRule — применяется собственно для задания перенаправления.

Из всего обилия переменных окружения наиболее часто употребляются следующие:
REQUEST_FILENAME (или SCRIPT_FILENAME) — полный путь к файлу, соответствующий текущему запросу;
REQUEST_URI — путь, прописанный в HTTP-запросе;
QUERY_STRING — GET-параметры.

Опции же пригодятся такие:
-d — проверка, ведет ли заданный путь к каталогу;
-f — проверка, является ли имя файлом;
-s — действует аналогично f, однако также проверяет размер файла (он должен быть больше 0).

Для чего можно использовать приведенную выше информацию? Прежде всего, для создания следующей записи, которая должна предварять код генерации SEF:

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

В заключении стоит разобрать еще один крайне важный момент — работу с RewriteRule. Данная директива позволяет создавать собственные переменные, что существенно упрощает работу с ЧПУ в htaccess. Для этого используются конструкции $1, $2, $3 и т.д. (а также %1, %2, %3), где цифра обозначает место расположения в строке. Но в чем же разница между $1 и %1? $1 используется для подстановки значений внутри самого правила RewriteRule, а %1 забирает таковое из условия RewriteCond.

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

Это можно сделать буквально в одну строчку:

Переменные распределились таким образом:
Правильный ЧПУ по средстав инструкций в htaccess

Им соответствуют следующие регулярные выражения:
$1=([A-Za-z0-9-]+) — здесь мы указали, что последовательность может содержать цифры, заглавные и строчные буквы латиницы, а также тире;
$2=(.+) — второй блок может содержать любой символ;
$3=([0-9]+) — третий, только цифры.

Если заданные условия соблюдены, происходит подстановка соответствующего значения GET-параметра, из них и формируется SEF-линк.

Переменную %1 проиллюстрируем на примере рассмотренного выше универсального редиректа на домен без www. Здесь с помощью %1 мы подставляем значения, заданные в RewriteCond.

Еще один важный для понимания момент: файл htaccess технически не преобразует динамические ссылки в статические, а расшифровывает представленную Апачу статику, трансформируя в соответствующий динамический урл. Именно поэтому в правилах мы сперва записываем своеобразный “макет” того, что хотим получить, и лишь затем отмечаем переменными необходимые GET-запросы.

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

1. Удаление технических категорий
Исключение из ссылки ненужных элементов позволяет сократить ее длину. Многие движки создают древовидные структуры документов, добавляя в URL служебную информацию (например, “category” в WordPress). В итоге урлы становятся чересчур громоздкими, принимая вид https://tekseo.su/category/articles/page_1.html. Данную проблему можно решить с помощью специализированных плагинов, либо прописав ЧПУ в htaccess. Последнее также пригодится владельцам самописных ресурсов, не поддерживающих SEO функционал. Для указанного примера правило будет выглядеть следующим образом:

На выходе мы получим: https://tekseo.su/articles/page_1.html

2. Преобразование динамических ссылок в ЧПУ
Весьма плохо обстоят дела с динамическими ссылками, представляющими собой адрес исполняемого скрипта и GET-параметр, который ему передается. В этом случает исходный урл содержит знак вопроса, что осложняет процесс создания редиректа. Apache обрабатывает их следующим образом: все, что находится до “?” воспринимается как URl, все, что после — становится параметром, передаваемым скрипту. Чтобы перенаправление сработало верно, обработку нужно разбить на две части. В зависимости от местоположения знака, возможны варианты:

а). Знак вопроса находится после названия файла (например, https://tekseo.su/index.php?cat_id=345):

б). Если же вопросительный знак идет сразу после слэша (например, https://tekseo.su/pages/?cat_id=345), 301 редирект необходимо прописывать немного иначе:

Автоматизировать процесс перезаписи можно, используя переменные. Тогда конструкция становится даже более наглядной. Усложним предыдущий пример. Предположим, у нас есть ссылка https://tekseo.su/index.php?cat_id=myposts&page_id=text. Требуется привести ее к формату https://tekseo.su/articles/myposts/text.html. Кроме того, мы хотим, чтобы данное правило работало для любых аналогичных URL. Запись будет выглядеть так:

Особое применение 301-го редиректа

В заключении разберем нестандартные варианты использования hypertext access.

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

Давайте зададим перенаправление запросов с tekseo.su на тексео.рф:

2. Подмена внешней ссылки на внутреннюю
Достаточно остроумный способ, позволяющий сделать урл, ведущий на сторонний ресурс, внутренним в глазах поисковых роботов. Представим ситуацию: вы хотите поставить на своем сайте линк на профиль ВКонтакте http://vk.com/id12345. Чтобы скрыть его от глаз роботов, можно воспользоваться атрибутом nofollow, либо создать мнимую страницу “my_social”, добавив следующее:

Формально ссылка останется внутренней, при этом пользователи ресурса ничего не заметят.

3. Редирект с прописных на строчные буквы
Одна из распространенных проблем многих CMS — появление дублей страниц, начинающихся с прописных и строчных букв (например, tekseo.su/Page1 и tekseo.su/page1). 301 редирект в htaccess способен справиться и с этой задачей, причем обработка будет происходить в автоматическом режиме и вам не придется описывать перенаправление вручную для каждого URL. Решение таково:

4. Каноничные адреса для файлов
12 февраля 2009 года Гугл аннонсировал поддержку тега rel=”canonical”. Одновременно о работе с атрибутом заявили Yahoo и Bing, а в настоящее время канонические ссылки распознают практически все крупные поисковики. С помощью него можно указать, какая из копий веб-документа является исходной, передав оригиналу значения тИЦ, PR и т.д.

Чтобы задать rel=”canonical”, его необходимо прописать внутри тега соответствующей страницы:

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

А регулярные выражения позволят указать в htaccess канонические версии сразу для всех файлов:

5. Запрещаем воровство статей ВКонтакте
В процессе борьбы с дублями контента вы можете обнаружить ссылки такого вида: http://www.tekseo.su/page-name.html&post=-123_456. Эта проблема связана с наличием плагина социальных сетей, а именно — кнопкой ВКонтакте. Когда кто-либо решает поделиться очередной статьей на стене, в паблике или группе, автоматически генерируется подобный адрес. И все бы ничего, но такие урлы «на ура» индексируются поисковиком Google. Чтобы это предотвратить, достаточно добавить в htaccess следующее:

Как видно, потенциал hypertext access чрезвычайно высок. Его грамотное использование позволяет решать абсолютное большинство задач технической оптимизации, используя нативные модули сервера. Что немаловажно, благодаря этому можно отказаться от программных “костылей”, получая дополнительные выгоды, в числе которых повышение производительности и защищенности курируемого проекта.

tekseo.su

Перенаправление доменов сайта

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

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

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

Типы редиректов

Различают клиентские и серверные HTML meta redirect. В случае с серверными перенаправлениями происходит передача кодов состояния HTTP пользовательским агентам (браузерам и поисковым роботам).

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

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

Серверные редиректы

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

Ниже приведены актуальные коды состояния HTTP 301 и 302:

  • redirect 301 HTML – перемещен навсегда: запрашиваемый ресурс теперь постоянно доступен по новому URL. Старый URL с этого момента становится недействительным;
  • 302 – перемещен временно: запрашиваемый ресурс доступен по новому URL. При этом исходный URL по-прежнему сохраняет свою актуальность.

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

Перенаправление через .htaccess

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

После того, как файл .htaccess со следующим кодом помещается в основные каталоги, запросы на исходный домен перенаправляются серверной стороной на домен www.example.com ‘‘:

Строка кода начинается с redirect 301 HTML и определяет код состояния HTTP, который будет передан сервером. Далее следует путь к контенту, который должен быть перенаправлен. В данном случае будет перенаправлено все содержимое. В заключении целевой URL перенаправляется на URL пользовательского агента: ‘http://www.example.com’.

Этот метод позволяет перенаправить отдельные файлы. Следующий код показывает редирект с одного сайта на другой:

.htaccess перенаправление из подкаталога на другой URL

Вот как выглядит постоянное перенаправление на сервере Apache с активным модулем mod_rewrite:

В первой строке кода модуль mod_rewrite сервера Apache активируется с помощью команды ‘RewriteEngine On’. После этого указывается «RewriteRule» с путем к файлу перенаправления и адресом назначения. Символы ^ и $ обозначают начало и конец пути, а L означает последнее правило для соответствующего запроса. R = 301 пересылает статус HTTP 301.

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

Перенаправления с помощью PHP

HTML redirect на другую страницу может также быть выполнен PHP скриптом (например, в index.php). Следующий код отображает постоянное перенаправление к целевому URL ‘www.example.com’:

При передаче через PHP скрипт код состояния HTTP определяется с помощью функции «header» во второй строке кода. В этом примере должен быть выполнен постоянный 301 редирект. Учитывая, что серверные перенаправления обычно выполняются на временной основе, то для постоянного редиректа нужно явно указать код состояния 301. Адрес назначения перенаправления также прописан в ‘header‘.

В примере перенаправление происходит на ‘http://www.example.com‘. Функция ‘exit‘ в четвертой строке кода заканчивает сценарий и препятствует выполнению следующей строки. Чтобы редиректы работали через PHP скрипт, блок кода должен быть расположен в начале HTML страницы. Это препятствует передаче сервером содержимого HTML на страницу перенаправления.

Клиентские редиректы

Если выполнение перенаправления на стороне сервера невозможно по техническим причинам, то можно использовать клиентское решение. Для этого применяется HTML метатег «refresh» и JavaScript. Недостатком перенаправления на стороне клиента является то, что серверы не передают коды состояния HTTP запрашивающим браузерам или поисковым роботам.

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

Redirect HTML index на стороне клиента оказывают негативное влияние на поисковый индекс. С клиентскими редиректами 301 не происходит явного исключения из индексации через код состояния HTTP. Это может привести к перенаправлению доменов, конкурирующих с доменами назначения, когда речь заходит о поисковых запросах, связанных с рейтингом. В отличие от серверных редиректов, которые остаются невидимыми для пользователей, клиентские всегда сопровождаются задержками.

Переадресация с помощью HTML метатега refresh

HTML перенаправления реализуются через метатеги с атрибутом ‘http-equiv’. Для этого нужен простой HTML-файл и соответствующий тег в заголовке для создания перенаправления. Чтобы посетители получали информацию о редиректе, в HTML-документе должно быть установлено соответствующее уведомление: «Пожалуйста, подождите. Вы будете перенаправлены … ‘. Простое перенаправление с помощью refresh выглядит следующим образом:

Клиенту будет предложено перенаправление на новую страницу через метатег http-equiv = «refresh». То, как это происходит, определяется в атрибуте ‘content’. Приведенный выше пример перенаправляет пользователей на домен ‘www.example.com‘ через десять секунд.

Переадресация с помощью JavaScript

JavaScript предлагает простую возможность HTML redirect домена на стороне клиента. Но JavaScript поддерживается не всеми браузерами из-за соображений безопасности. Использование данного решения также может создать проблемы для поисковых роботов и пользователей с активными дополнениями NoScript. Вот как выглядит код перенаправления с помощью JavaScript:

Самое главное здесь это третья строка кода. Объект ‘window.location‘ используется, чтобы сделать ссылку на текущий адрес сайта. Команда ‘replace‘ инструктирует браузер направить пользователя к домену назначения (‘www.example.com‘).

Перевод статьи “Domain redirects via .htaccess, PHP, HTML, and JavaScript” был подготовлен дружной командой проекта Сайтостроение от А до Я.

www.internet-technologies.ru


You May Also Like

About the Author: admind

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

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

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