.htaccess и mod_rewrite
часто слышу вопросы по mod_rewrite и так же часто слышу коментарии к моим наставлениям сходить в мануал: “я в нете читал про модреврайт я там чуть мозг не сломал” ©
Ну что ж - попробуем разобраться, чтобы ничего не сломать
итак начну с того, что чаще всего пугает разработчиков впервые столкнувшихся с чудесами mod_rewrite. Человек знает, что у него на сайте есть ссылки по типу index.php?page=somepage&action=view и ссылок таких много и все они разные… И представив многообразие данных, разраотчик задумывается “а как же заставить mod_rewrite переписать все эти ссылки на страницах?”. Никак. Переписать сами ссылки прийдется ручками, а вот mod_rewrite возьмет на себя функцию непосредственного преобразования “красивых” ссылок в “некрасивые” (да - именно так, а не иначе!).
Но как же написать правила и как оно работает изнутри? mod_rewrite - является модулем веб-сервера Apache и подключается в соответствующей секции его (Апача) конфига (httpd.conf). Подключение модуля выражается одной строкой
LoadModule rewrite_module modules/mod_rewrite.so
строка скорее всего уже присутствует в конфиге, нужно лишь снять с нее комментарий (#). И если возникли проблемы, то необходимо убедиться что файл modules/mod_rewrite.so (такая юниксовая библиотека) действительно находится в системе по этому пути. Раскомментировали, перезапустили Апач и можно начинать писать первое правило
Допустим на сайте mysite.com все разделы доступны по ссылкам вида: index.php?page=somepage&action=view
параметр page указывает идентификатор вызываемой страницы, а параметр action тип действия (отобразить пользователю/редактировать админом/что-то еще). Что же необходимо сделать, что бы ссылки ан сайте преобрели вид: mysite.com/somepage/?
Для начала нужно пройтись по сайту и сменить все ссылки на требуемый вид (там где было index.php?page=somepage&action=view теперь будет /somepage/), затем в корне сайта создаем (или редактируем) файл .htaccess. В него необходимо доавить следующие строки:
RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]+)$ index.php?page=$1&action=view
Разберем фал по строкам.
1я строка: включаем механизм “перезаписи” запросов
2я строка: указываем корень “перезаписи”
3я строка: правило перезаписи. тут остановимся подробнее.
Сами по себе правила mod_rewrite являют регулярные выражения POSIX и посему людям знакомым с ними особого труда в написании правил не будет… Итак. Первая часть правила указывает ЧТО попадает под правило, а вторая часть указывает КАК правило необходимо интерпретировать. Все совпадения в первой части обрамленные скобками “(” “)” попадут во вторую часть под номерами в порядке совпадения. Таким образом первое совпадение будет $1, второе - $2, третье - $3…
Вот собственно и все базовые знания необходимые для манипуляции ссылками на сайте. Для более глубоких познаний и возможностей (а их ОЧЕНЬ много у данного модуля) рекомендую почитать официальную документацию…
И еще. Может возникнуть вопрос “а как быть с ссылками неопределенной вложенности категорий?”. Ответ прост. Проанализируйте это:
если линк должен выглядить как: /page/somepage/otherpage/catalog/
это совершенно не значит что для каждой записи после слеша объявляется своя переменная. возможно без mod_rewrite ссылка выглядела бы как: catalog.php?path=/page/somepage/otherpage/catalog/
Удачных эксперементов с этим мощным инструментом Апач и не забывайте, что переусердствовать не стоит, так как чем больше правил, тем больше Вы будете нагружать процессор сервера при обращении пользователя к Вашим страничкам…
Tags: Apache, mod_rewrite, PHP, работа
Также рекомендую к прочтению:
Июнь 29th, 2010 at 14:41
Спасибо, хорошая статья!