Что такое 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, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: