[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / .htaccess /

Красивый URL


Многие начинающие веб-мастера встречаются с проблемой обработки длинных адресов в строке браузера. Например, у вас есть динамическая страница, которая обрабатывает запросы на скачивание файлов, с адресом вида 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. Если вы пользуетесь платным хостингом, обратитесь в службу поддержки или к администратору сервера с просьбой уточнить этот момент и в случае чего добавить такую возможность. Если же вы используете бесплатный хостинг, то придется вас огорчить — наверняка у вас ничего не получится . Правда, есть и приятные исключения — "забугорные" http://hypermart.net/ и http://virtuave.net/.

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

Options ExecCGI FollowSymLinks Includes MultiViews

RewriteEngine on



Далее в каждой строке указывается правило перенаправления. Допустим, нам нужно сделать перенаправление с 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]



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

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

Options ExecCGI FollowSymLinks Includes MultiViews

RewriteEngine on

RewriteRule ^stat/([0-9]+)/([0-9]+) /cgi-bin/statistic.cgi?year=$1&month=$2



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

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

Options ExecCGI FollowSymLinks Includes MultiViews

RewriteEngine on

RewriteBase /my-files/ # задаем папку, в которой находился старый документ

RewriteRule ^old.html$ new.html # перенаправляем со страницы old.html на new.html



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

Options ExecCGI FollowSymLinks Includes MultiViews

RewriteEngine on

RewriteRule ^$ /cgi-bin/index.cgi?topic=main&page=1 [T=application/x-httpd-cgi,L]



Теперь, когда пользователь набирает в строке браузера 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, в котором пишем следующее:

Options ExecCGI FollowSymLinks Includes MultiViews

RewriteEngine on

RewriteRule ^$ /home [R]

RewriteRule ^index.html /home [R]

RewriteRule ^home$ /cgi-bin/index.cgi?topic=main&page=1 [T=application/x-httpd-cgi,L]

RewriteRule ^$ /home [R]



Сначала перенаправляем 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. Поэтому для таких ситуаций нужно прописывать еще одну строку:

RewriteRule ^home/ /home [R]



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

P.S. Если вы неплохо владеете английским, то можете зайти на http://www.engelschall.com/pw/apache/rewriteguide, где найдете полное описание mod_rewrite.




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / .htaccess /

Защита include-модулей от несанкционированного доступа на сайте
14-11-2009   

Когда Вы пишите простенькую гостевую книгу, или счетчик, прибавляющий 1, к предыдущему значению, Вы, как правило, используете один-два файла не связанные друг с другом. Но однажды возникает необходимость разделять программу на несколько частей, причем одна часть вызывается другой... подробнее

Кол. просмотров: общее - 3111 сегодня - 2

Псевдостатика (mod_rewrite). Часть 2
14-11-2009   

В предыдущей части статьи мы рассмотрели основные принципы работы mod_rewrite. В этой статье будут рассмотрены общие случаи использования mod_rewrite и его возможностей... подробнее

Кол. просмотров: общее - 2988 сегодня - 1

Псевдостатика (mod_rewrite). Часть 1
14-11-2009   

Эта статья была написана мной во время разработки нового движка для сайта. Как и все пользователи интернета, я с некоторого времени (примерно год назад) стал замечать, что все больше и больше популярных сайтов переходят от url вида http://site.net?pid=general&id=5&s=98465 на псевдостатику или на ЧПУ (Человеку Понятный УРЛ)... подробнее

Кол. просмотров: общее - 2895 сегодня - 1

Файл .htaccess на службе у seo-оптимизатора
14-11-2009   

Во многих информационных материалах, которые мне когда-либо приходилось читать об этом служебном файле веб-сервера Apache, говорилось, в основном, о том, как правильно сконфигурировать сервер для качественной работы сайта... подробнее

Кол. просмотров: общее - 3343 сегодня - 1

Красивый URL
05-04-2009   

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

Кол. просмотров: общее - 3573 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects