Домой / Поисковые системы / Преобразование динамических адресов страниц в статические при помощи модуля mod_rewrite

Преобразование динамических адресов страниц в статические при помощи модуля mod_rewrite

 

29.06.2003 автор: Юрий Голубов, источник: mycomp.com.ua

Многие веб-мастера встречаются с проблемой обработки длинных адресов в строке браузера. Например, у вас есть динамическая страница, которая обрабатывает запросы на скачивание файлов, с адресом вида
http://www.my-site.com.ua/cgi-bin/download/get-files.cgi. Для обработки файла
нужно ввести категорию файла (к примеру, «мои файлы» — id=my-files) и название
(допустим, name= My_Editor), после чего у нас получится что-то вроде
http://www.my-site.com.ua/cgi-bin/download/get-files.cgi?id=my-files&name=My_Editor.
Согласитесь, такой вид крайне неудобен для конечного пользователя, особенно
если адрес ему приходится вводить вручную.

Избежать подобных сложностей можно с помощью инструмента mod_rewrite из стандартного набора сервера Apache (http://www.apache.org).
Он позволяет созданную выше конструкцию преобразовать в запись вроде
http://www.my-site.com.ua/my-files/dn_pg=My_Editor. Или вот еще один пример.
Допустим, вам надо вывести статистические данные о работе компании за каждый
месяц. Если не использовать mod_rewrite, то страница будет иметь вид вроде
http://www.my-site.com.ua/cgi-bin/statistic.cgi?year=2000?month=06. Но все это
можно представить значительно проще: http://www.my-site.com.ua/stat/2000/06.
Подобных примеров использования mod_rewrite можно привести уйму, поэтому не
будем долго разглагольствовать о теории, а быстрее перейдем к практике.

Итак, приступим к созданию простых адресов. Для начала нужно
выяснить, поддерживает ли ваш сервер mod_rewrite. Если вы пользуетесь платным
хостингом, обратитесь в службу поддержки или к администратору сервера с
просьбой уточнить этот момент и в случае чего добавить такую возможность. Если
же вы используете бесплатный хостинг, то придется вас огорчить — наверняка у
вас ничего не получится .

Теперь давайте разберемся с процедурой установки перенаправлений.
Все данные о новых URL-адресах нужно прописывать в файл .htaaccess, который
следует разместить в основном каталоге сервера, причем закачивать его на сервер
нужно в двоичном формате. Вначале документа пропишите такие строки:


Далее в каждой строке указывается правило перенаправления.
Допустим, нам нужно сделать перенаправление с
http://www.my-site.com.ua/cgi-bin/download/get-files.cgi?id=xxx&name=xxx на
http://www.my-site.com.ua/xxx/dn_pg=xxx. Приписываем в .htaaccess такую строку:

Теперь давайте немного разберемся с синтаксисом построения
указаний. Команда RewriteRule указывает серверу на перенаправление,
^/(.+)/dn_pg=(.+) — какой запрос перенаправлять,
/cgi-bin/download.cgi?id=$1&name=$2 — реальный адрес перенаправления,
наконец, [T=application/x-httpd-cgi,L] указывает на CGI/Perl-скрипт.

Теперь зададим правило для перенаправления по второму примеру:



Последняя строка задает формат, в данном случае цифры от 0 до 9 —
([0-9]+), — и перенаправляет каждую цифру на соответствующий адрес ($1,$2).
Запись ([0-9]+) свидетельствует про обработку только цифр, то есть буквы
затрагиваться не будут.

Также бывают ситуации, когда нужно сделать редирект со старой
страницы на новую. Вот пример подобного сценария:




Бывают такие ситуации, когда нужно, чтобы начальная страница
запускалась с множеством параметров (это когда вы используете CGI- или
PHP-скрипты и хотите, чтобы при первой загрузке сайта в них передавались
какие-нибудь данные). Допустим, мы будем передавать данные с
http://www.my-site.com.ua на
http://www.my-site.com.ua/cgi-bin/index.cgi?topic=main&page=1. Чтобы
организовать такой редирект, нам нужно прописать следующие строки:



Теперь, когда пользователь набирает в строке браузера
http://www.my-site.com.ua, то он
перенаправитсянаhttp://www.my-site.com.ua/cgi-bin/index.cgi?topic=main&page=1,
но в строке браузера по-прежнему будет значиться адрес
http://www.my-site.com.ua
. Если добавить в
[T=application/x-httpd-cgi,L] параметр R, то перенаправление будет явным, а не
скрытым.

Теперь давайте сделаем сложный перевод, например, чтобы первая
страница (чаще всего это index.html) перенаправлялась на
http://www.my-site.com.ua/home, а http://www.my-site.com.ua/home в свою очередь
скрыто исполняла CGI-скрипт с параметрами
http://www.my-site.com.ua/cgi-bin/index.cgi?topic=main&page=1. Для этого
снова редактируем файл .htaccess, в котором пишем следующее:






Сначала перенаправляем http://www.my-site.com.ua на home, далее
index.html на тот же home (на тот случай, если кто-нибудь вздумает набрать в
строке браузера http://www.my-site.com.ua/index.html) и в конце перенаправляем
home на cgi-bin/index.cgi?topic=main&page=1. Хочу заметить одну важную
деталь — если в строке браузера ввести http://www.my-site.com.ua/home/ (в конце
добавим /), то пользователь получит ошибку. Это связано со спецификой
компонента mod_rewrite. Поэтому для таких ситуаций нужно прописывать еще одну
строку:

Напоследок хочу сказать, что mod_rewrite можно использовать и для
более сложных задач, например для поиска нужных файлов в разных каталогах, а
также для виртуальных доменов.

 

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *