URL (урл) - Uniform Resource Locator - уникальный адрес веб-документа. Часто в адресе присутствуют переменные, которые разделяются спецсимволами (чаще всего это знак амперсанда - &, иногда точка с запятой - ;). Было время, когда поисковые роботы не совсем корректно индексировали странички с такими параметрами, и вебмастера старались создать псевдостатичные ссылки, т.е. скрипт формировал ссылки без этих параметров, а при переходе по такой ссылке, она преобразовывалась в ссылку с переменными. Например, ссылка http://www.site.ru/id153.php преобразовывалось в http://www.site.ru/index.php?id=153
За такое преобразование отвечает файл .htaccess.
Файл .htaccess должен содержать команду запуска модуля преобразования ссылок (RewriteEngine on) и правило преобразования (RewriteRule), в нашем примере:
RewriteEngine on RewriteRule id153.php index.php?id=153 [L, NC]
После правила преобразования дополнительно стоят квадратные скобки с параметрами через запятую. L - указывает, что это правило последнее (т.е. если ссылка совпала с правилом, то дальнейшие преобразования не учитываются), NC - указывает, что регистр роли не играет.
Писать правило для каждой странички было бы неудобно. Файл .htaccess позволяет применять регулярные выражения:
RewriteEngine on RewriteRule id([0-9]+).php index.php?id=$1 [L, NC]
Мы изменили наш пример, теперь после id может стоять любой набор цифр, сами цифры подставляются во вторую часть преобразования с помощью символа $1. В правиле может быть несколько преобразований, например, с датами:
RewriteRule news/([0-9]+)/([0-9]+)/([0-9]+).php index.php?year=$1&month=$2&date=$3 [L, NC]
В данном случае мы преобразуем ссылку вида http://www.site.ru/news/2009/11/17.php, которая будет обрабатываться скриптом index.php с переменными $_GET['year'], $_GET['month'], $_GET['date'] с соответствующими значениями (число после $ соответствует порядковому номеру шалона в регулярном выражении)
Применять преобразования мы можем по условию, для этого перед RewriteRule можно добавить несколько строк с условиями с директивой RewriteCond. Самы простой повод применить условия для mod-rewrite - необходимость исключить директорию (например, админку) из такого преобразования. Тогда файл будет иметь следующий вид:
RewriteEngine on RewriteCond %{REQUEST_URI} !^/admin/ RewriteRule id([0-9]+).php index.php?id=$1 [L, NC]
Copyright © 2009 "Программирование на PHP для начинающих"