Редирект Htaccess и его настройка

Файлы .htaccess могут находиться в корневом каталоге сайта (например, /home/user/sitename/) или его вложенных каталогах. Они используются для организации перенаправления («редиректа») посетителей с одного домена или документа на вашем веб-сервере на другой. Каждый файл .htaccess содержит набор правил (директив), в соответствии с которыми веб-сервер перенаправляет пользователя на ту или иную страницу.

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

Создание файла .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.

Комментарии