Электронный интернет-журнал Open Journal
 
  
rss feed get rss feed
главная
войти
форум
связь



1 Балл2 Балла3 Балла4 Балла5 Баллов (Количество голосов: 10, Общая оценка: 4.6 из 5)
Грузится ... Грузится ...

Использование ModRewrite, или ModRewrite вам в помощь

Ноябрь 1, 2006

Что такое «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
Автор: Сергей Яценко

Теги:  , , , , , , ,

Категория: Создание вэб-сайтов, Поисковая оптимизация |

1 Комментарий

»
  1. Если Вы читаете на английском, то советую прочесть этот мануал:
    http://www.romz.ru/manual/mod/mod_rewrite.html

    Комментарий от Антон Пархоменко — среда, Декабрь 13, 2006 | 04:42 pm

Дополнительно:

Засоциалить этот пост: google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Вы должны ВОЙТИ чтобы оставить комментарий!

Ближайшие темы:


« За грязную поисковую оптимизацию можно сесть на 20 лет

Google даст заработать на персональном поиске »


Image
Январь 2009
Пн Вт Ср Чт Пт Сб Вс
« Август    
 1234
567891011
12131415161718
19202122232425
262728293031  

Категории

Реклама

Последние комментарии