|
ModRewrite в помощь usabilityИсточник: http://www.nbsp.ru/ С ростом сложности веб-приложений появляется необходимость в создании различных комманд от пользователя, или запросов. Как правило, это достигается при помощи создания необходимого URL, например, такого вида: http://localhost/index.shtml?page=1&book=28&lpg=15&hf=& ac=list&tmpl=stat&m=1&tmpl=newsall Подобные запросы пользователь Интернет видит каждый день. Более того, подсознательно он пытается из запоминать, чтобы впоследствии изменять его вручную, добиваясь нужной информации от сайта. Но посмотрите ещё раз на этот URL: что-нибудь понятно? Почти нет. Легко ли запомнить такой адрес - нет. Приятно ли наблюдать этот набор букв и цифр в адресной строке браузера? Тоже нет. Как решить эту проблему? Существует несолько способов избежать использования громоздких URL. Я постараюсь рассмотреть один из них, самый правильный, на мой взгляд: ModRewrite. Так называется дополнительный модуль для популярного веб-сервера Apache, доля которого на рынке веб-серверов составляет более 70%. Этот модуль содержится в стандартной поставке сервера. Но как правило, он обычно отключен. Для начала, убедимся, что ModRewrite включен. Для этого, откроем конфигурационный файл сервера Apache - httpd.conf в любом текстовом редакторе и найдём такие строки: #AddModule mod_rewrite.c и #LoadModule rewrite_module modules/mod_rewrite.so Если перед ними находится символ # - удалите его и перезапустите сервер. Модуль начнет функционировать. Далее необходимо "включить" ModRewrite для конкретного вебсайта. Для этого в этом же файле, httpd.conf, в разделе описания конфигурации вебсайта добавляем такую команду: RewriteEngine On Например, в описании виртуальной директории:
Включить ModRewrite можно и при помощи файла локальных настроек сайта - .htaccess. Пример содержимого .htaccess: order allow,deny allow from all Options -Indexes RewriteEngine On # добавляем Самое главное мы сделали. Теперь рассмотрим несколько примеров того, что нам может дать ModRewrite. Пример 1. Новости. Предположим, на вашем сайте доступ к новостям осуществляется посредством такого запроса: http://localhost/index.php?show=news&year=2002&month=9& day=7 В результате мы отображаем новости за 7 сентября 2002г. Оформим это запрос при помощи ModRewrite, чтобы он выглядел как http://localhost/news/2002/9/7/ Изменим файл .htaccess следующим образом: ... RewriteEngine On # добавляем RewriteRule ^([a-z]+)/([0-9]*)/([0-9]*)/([0-9]*)/$ /index.php?show=$1&year=$2&month=$3&day=$4 Разберёмся. Строкой ^([a-z]+)/([0-9]*)/([0-9]*)/([0-9]*)/$ мы задаём формат нового запроса - /news/2002/9/7/. (Эта строка - не что иное, как Regular Expression, мощный формат для записи шаблонов текста и поиска по нему.) $1,$2,$3,$4 - пронумерованные результаты поиска в строке запроса. Строка /index.php?show=$1&year=$2&month=$3&day=$4 - это запрос, который мы используем внутренне, для удобства программирования. Как видим, он остался прежним, но пользователь (!) уже не увидит его. Для него доступ к новостям теперь будет осуществляться в удобном виде - /news/2002/9/7/. В целях отладки лучше изменить команду RewriteRule, добавив [R] в конце строки: RewriteRule ^([a-z]+)/([0-9]*)/([0-9]*)/([0-9]*)/$ /index.php?show=$1&year=$2&month=$3&day=$4 [R] Тогда после запроса /news/2002/9/7/ в адресной строке мы увидим наш старый URL /index.php?show=news&year=2002&month=9&day=7. [R] даёт команду ModRewrite перенаправить (redirect) запрос. Пример 2. Подмена страницы в зависимости от браузера. Иногда возникает необходимость "подсовывать" разные страницы в зависимости от пользовательского браузера. Изменим файл .htaccess: RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule ^page\.html$ page_mozilla.html [L] RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule ^page\.html$ page_lynx.html [L] RewriteRule ^page\.html$ page_other.html [L] Разберёмся. Команда RewriteCond - это условие для ModRewrite, означающее, что подстановка RewriteRule будет осуществлена только при соблюдении вышестоящего условия RewriteCond. В данном случае, браузерам, определяющим себя как Mozilla, при запросе файла page.html будет отдана страница page_mozilla.html. Пользователям Lynx - страница page_lynx.html. Всем остальным будет показана страница page_other.html. Директива [L] (last) даёт указания прекратить обработку дальнейших комманд ModRewrite. Пример 3. Виртуальные домены для пользователей. Предположим, что необходимо создать под-домен для каждого пользовательского каталога вашего сайта: чтобы адрес вида http://www.website.net/vasya/ (где vasya - пользовательский каталог) выглядел как http://www.vasya.website.net/. Посмотрим на необходимую конфигурацию .htaccess: RewriteCond %{HTTP_HOST} ^www\.[^.]+\.website\.net$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^www\.([^.]+)\.website\.net(.*) /$1$2 Разберёмся. Условие RewriteCond даёт указания обрабатывать следующие команды RewriteRule только в том случае, если запрос имеет вид http://www.vasya.website.net/ (HTTP_HOST - это переменная сервера Apache, содержащая в себе текущий хост, или домен). Далее следует правило для обработки подкаталогов, например http://www.vasya.website.net/about/ Директива [C] (chain) означает, что следующая команда RewriteRule будет выполнена только при условии выполнения предыдущей команды. В результате, запросив адрес http://www.vasya.website.net/about/, мы получим содержимое страницы, находящейся по адресу http://www.website.net/vasya/about/ Такая организация пользовательских каталогов помогает избежать создания многочисленных виртуальных хостов, что очень удобно, если пользователей десятки и сотни. Резюме. Изучив более подробно механизм ModRewrite, а также синтаксис Regular Expression, можно создавать всевозможные обработки запросов и преподносить их в удобоваримом виде. Полезные ссылки:
|
Copyright © <LMTH>. Все материалы являются собственностью их авторов.
При перепечатывании ссылка на http://www.magaz.org/ как на источник информации обязательна. Правила использования материалов журнала |