Что такое htaccess, редирект через htaccess и изменение адресов с mod_rewrite

Файл ".htaccess" (с точкой в начале названия файла) - это конфигурационный файл Apache. Он позволяет изменять глобальные настройки в некоторых конкретных директориях. К примеру, делать переадресацию (редиректы), отключать обработку PHP файлов. Файл ".htaccess" - это текстовый документ, который можно изменить в любом текстовом редакторе. Обычно на хостингах данный файл изначально присутствует в корневой папке сайта. Но вы можете создать несколько файлов ".htaccess" в любых подпапках. Тогда правила будут перезаписываться.

Простой редирект через .htaccess

Разберём одну из самых популярных задачу, которую возлагают на файл ".htaccess" - это переадресация посетителя сайта на другую страницу. Откройте файл .htaccess в корневом каталоге сайта и в самом начале, первой строчкой напишите:
Redirect 301 / https://mousedc.ru
301 означает, что во время перенаправления пользователя сервер выдаст код ответа 301-"Permanent Redirect", что означает, что документ перенесён на новый навсегда.
Некоторые возможные HTTP статусы:
301 - документ перемещен постоянно
302 - документ перемещен временно
303 - смотрите другой документ
403 - документ запрещён к просмотру
404 - документ не найден
410 - документ убран
Слеш "/" после 301 означает, что перенаправление будет срабатывать в любом случае, к какой бы странице или файлу не обратился пользователя. Если вместо слеша поставить адрес файла, к примеру:
Redirect 301 /folder/page1.php https://mousedc.ru
- то будет происходить переадресация только в том случае, если пользователь запросит страницу "/folder/page1.php".

Последним параметром для Redirect стоит адрес страницы, на которую будет сделано перенаправление. В примере это "https://mousedc.ru".

Редирект с регулярным выражением через .htaccess

Существует возможность сделать редирект по регулярному выражению. То есть в случае, если запрашиваемый адрес подходит под регулярное выражение, то будет происходить редирект:
RedirectMatch 301 (.*) https://mousedc.ru$1 
Чтобы понять, что происходит в этом коде, рекомендуем прочитать все статьи о регулярных выражениях, начиная с Регулярные выражения в PHP. Если кратко, то образуется карман (.*), значение которого подставляется в самый конец домена, вместо $1 в строке https://mousedc.ru$. В кармане находится относительный адрес запрашиваемой страницы (то есть без домена).

Использование регулярного выражения полезно для переадресации обращения к файлам. К примеру, сделаем переадресацию при запросе jpg картинок:
RedirectMatch 301 (.*\.jpg)$ https://mousedc.ru/example.jpg 

Изменение адресов и Mod_rewrite

Mod_rewrite - модуль, используемый Apache для преобразования адресов. Во время преобразования адресов происходит обращение к одному файлу, запрашиваемому по другому адресу. Этот приём часто используется в реальных проектах сайтов. Рассмотрим простейший пример изменения адреса с mousedc.ru/product/5/ на mousedc.ru/product/index.php?id=5. Такое преобразование можно часто встретить :
RewriteEngine on
RewriteRule ^product/([0-9]+)/?$ product/index.php?id=$1 [L]
При таком правиле пользователь будет заходить на страницу mousedc.ru/product/5/, а сервер будет возвращать содержание страницы mousedc.ru/product/index.php?id=5.

В конце правила можно заметить квадратные скобки. В эти скобки [ ] ставятся флаги. Можно поставить один флаг, к примеру, [L] и несколько флагов через запятую [NC,R=301,L]. Приведём значения самых популярных из них:
  • R - вызывает редирект. Можно казать после этого флага код ответа сервера, например [R=301]
  • L - останавливает процесс изменения адреса. Означает, что следующие RewriteRule после этой строчки не будут выполнены
  • N - перезапускает преобразование адреса заново, начиная с первого правила. Но на этот раз подставляется адрес, изменённый в процессе проделанных преобразований. Будте осторожны, чтобы не сделать бесконечный цикл
  • C - если следующее после этого правило не выполняется, то преобразование будет прервано. Если выполняется, то преобразование продолжится
  • NC - делает шаблон преобразования нечувствительным к регистру. То есть могут быть переданы азглавные и строчные символы - всё будет обработано правилом
  • NE - не даёт преобразовывать спецсимволы в шестандцатиричные кодировки. К примеру, не даёт заменять в адресе символ "$" на "%24".
  • F - делает документ запрещённым - вызывает HTTP со статусом 403
  • G - указывает на несуществующий документ - вызывает HTTP со статусом 410
Теперь допустим, что нужно сделать редирект абсолютно со всех файлов в папке /products/ на один адрес. В этом нам поможет следующее правило:
RewriteRule ^products/(.*)$ /products.php [L,R=301]
- такое правило может пригодиться, если нужно закрыть давно существующий раздел, но не хочется терять ссылочную массу.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, покупка SSL сертификатов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: