Коротко о главном
mod_rewrite – специальный модуль, входящий в состав Apache, позволяющий подменять адреса страниц. Например, «некрасивый» адрес страницы http://вашсайт.ru/showGroup.php?id=blog&subid=programming, можно сделать более «красивым» http:// вашсайт.ru/blog/programming.
Настройки перенаправления делаются в файле .htaccess.
Я не буду здесь подробно описывать, как это работает. В двух словах, включается mod_rewrite командой RewriteEngine On, далее, создаются правила перенаправления, в шаблонах перенаправления используются обычные регулярные выражения:
RewriteRule красивый url настоящий url [флаги]
Например:
RewriteEngine On RewriteBase / RewriteRule ^([\w\d\-]+)/([\w\d-]+).html$ group.php?group_id=$1&id=$2 [L,NC,QSA] RewriteRule ^([\w\d\-]+).html$ show.php?id=$1 [L,NC,QSA]
Здесь, первое правило указывает, что все обращения к адресам типа http://mysite.ru/preved/medved.html обрабатываются страницей http://mysite.ru/group.php, а адреса типа http://mysite.ru/preved.html обрабатываются страницей http://mysite.ru/show.php.
Шаблон регулярного выражения: ([\w\d\-]+) – указывает на то, что в адресе могут быть использованы буквы, цифры и символ тире (-).
Флаги
[R] Redirect - останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (код 302 - MOVED TEMPORARY), также можно указать код редиректа самостоятельно, например R=301 (код 301 - MOVED PERMANENTLY). [F] Forbidden - возвращает ошибку 403. [G] Gone - возвращает ошибку 410. [P] Proxy - дает команду Apache выполнть подзапрос к указанной странице с использованием программного модуля mod_proxy, при этом пользователь ничего не узнает об этом подзапросе. Если модуль mod_proxy отсутствует, то произойдет ошибка. [L] Last - останавливает процесс преобразования, и текущая ссылка считается окончательной. [N] Next - запускает процесс преобразования с первого по порядку правила. [C] Chain - объединяет несколько правил в цепочку. Если первое правило цепочки не срабатывает, то вся цепочка игнорируется. [NS] NoSubreq - разрешает срабатывание правила только для настоящих запросов, игнорируя подзапросы. [NC] NoCase - отключает проверку регистра символов. [QSA] Qsappend - добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны. [PT] PassThrough - останавливает процесс преобразования и передает полученную новую ссылку дальше по цепочке. [S] Skip - пропускает следующее правило, если данное правило сработало. Можно указать количество правил, например: S=2 [E] Env - устанавливает переменную окружения, например: E=переменная:значение.
Флаги указываются в конце каждого правила в квадратных скобках через запятую.
Например:
RewriteRule ^([\w\d\-]+).html$ show.php?id=$1 [L,NC,QSA]