Использование ModRewrite, или ModRewrite вам в помощь
Что такое «mod_rewrite» и с чем его едят – вот в чём вопрос.
Именно так вкратце можно охарактеризовать данную статью. В материале затронута настройка и основные принципы работы модуля «mod_rewrite». Примеры снабжены подробными объяснениями. С ростом сложности веб-приложений появляется необходимость в создании различных команд от пользователя, или запросов. Как правило, это достигается при помощи создания необходимого URL, например, такого вида:
http://somebadserversite.ru/index.shtml?page=2&lpg=15&hf=&ac=list&tmpl=stat&m=1
С подобным построением и отображением URL-адресов, ежедневно сталкивается почти каждый пользователь Интернета. Более того, подсознательно каждый из нас пытается запомнить их, чтобы впоследствии вводить их вручную, получая только требуемую и нужную информацию от интересующего сайта. Но посмотрите ещё раз на этот URL. Неужели Вам что-нибудь понятно? Я уверен – практически ничего. Легко ли запомнить такой адрес? И снова ответ прост – «Нет». Приятно ли наблюдать подобный невразумительный набор букв и цифр в адресной строке своего браузера? Тоже нет.
Как решить эту проблему? Существует несколько способов избежать использования громоздких URL. В этой статье я постараюсь остановиться на наиболее удачном и правильном, на мой взгляд, варианте – использование «mod_rewrite». Так называется дополнительный модуль для популярного веб-сервера «Apache», доля которого на рынке веб-серверов составляет более 70%. Этот модуль содержится в стандартной поставке сервера. Но, как правило, он обычно (по дефолту) отключен.
Для начала, убедимся, что «mod_rewrite» включен. Для этого откроем конфигурационный файл сервера «Apache» - httpd.conf в любом текстовом редакторе и поищем следующие строки:
#AddModule mod_rewrite.c и #LoadModule rewrite_module modules/mod_rewrite.so
Если перед ними находится символ # - удалите его и перезапустите сервер. Модуль начнет функционировать.
Далее необходимо "включить" ModRewrite для конкретного вебсайта. Для этого в этом же файле, httpd.conf, в разделе описания конфигурации вебсайта добавляем такую команду:
RewriteEngine On
Например, в описании виртуальной директории:
< Directory D:/Internet/web/rewr/ > Options Indexes FollowSymlinks MultiViews RewriteEngine On # добавляем AllowOverride All Order allow,deny Allow from all < /Directory>
Включить 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, можно создавать всевозможные обработки запросов и преподносить их в удобоваримом виде.
Первичный источник: http://www.nbsp.ru
Автор: Сергей Яценко
Категория: Создание вэб-сайтов, Поисковая оптимизация |


(Количество голосов: 10, Общая оценка: 4.6 из 5)



Если Вы читаете на английском, то советую прочесть этот мануал:
http://www.romz.ru/manual/mod/mod_rewrite.html
Комментарий от Антон Пархоменко — среда, Декабрь 13, 2006 | 04:42 pm