IZONE- http://www.izcity.com/- бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

Построение сайта по единому шаблону. Часть 3

Юрий Рассадников

Это третье логическое продолжение публикаций "Практическое применение PERL-скриптов и "Построение сайта по единому шаблону, часть 2"

Если вы создали динамический сайт, то скорее всего адреса страниц выглядят не самым лучшим образом. Я бы сказал очень недружественно по отношению к пользователю.

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

Адреса Ваших страниц при этом выглядят следующим образом: "http://my.site/shablon.shtml?page.htm" или "http://my.site/?page" если файлом шаблона является индексный файл, а расширение ".htm" вы автоматически добавляете ко всем вставляемым страницам. Еще более недружественным является вариант, часто встречающийся в интернете: "index.php?page=27".

Согласитесь, что намного приятней наблюдать и набирать адрес: "http://my.site/page.htm" нежели "http://my.site/?page.htm", тем более запомнить к чему относится "http://my.site/index.php?page=27". Я хочу сказать, что адрес страницы сам по себе должен нести смысловую нагрузку, быть интуитивно понятным посетителю Вашего сайта. К примеру, адрес "http://my.site/photo/cars/bmw/z8" более чем красноречиво говорит куда Вы попадете.

Выход из создавшейся ситуации есть. У вэб-сервера Apache есть модуль "mod_rewrite". И некоторыми из его возможностей мы и воспользуемся.

Для начала необходимо убедится, что данный модуль используется на Вашем сервере. Если вы используете PHP то просто выполните скрипт <? phpinfo(); ?> и убедитесь что среди загруженных модулей есть mod_rewrite. В противном случае уточните возможность использования этого модуля у администратора хостинга, где Вы держите сайт.

Далее в файл .htaccess добавляем следующие инструкции:
RewriteEngine on
RewriteRule !\.(gif|jpg|zip|js)$ /my.site/index.php

Разберем инструкции:
RewriteEngine on - включить модуль, грубо говоря разрешить ему работать
RewriteRule !\.(gif|jpg|zip|js)$ /my.site/index.php - описание правила, согласно которому все запросы перенаправляются файлу index.php, за исключением файлов с расширениями: gif, jpg, zip и js.
При этом /my.site/index.php - полный физический путь на сервере к файлу который будет обрабатывать все перенаправляемые запросы. Зачастую этот пут очень причудлив: "/www/users/oleg/www.mysite.com/htdocs/index.php". Поэтому обязательно его уточните. :)

Итак, пол дела сделано, все запросы перенаправляются одному файлу, и в нашем случае это файл-шаблон. Осталось только привести пример обработки запроса, чтобы Вы могли воспользоваться всем выше описанным.

Магический код в файле-шаблоне, пример на PHP:

<?
if (!(file_exists($DOCUMENT_ROOT.$REQUEST_URI))) $url="/404.htm";
else $url=$REQUEST_URI;
include($DOCUMENT_ROOT.$url);
?>

В первой строке производим проверку наличия запрашиваемого файла, если его нет, то переменной имени файла присваевается имя 404.htm (сообшение о 404-ой ошибке, файл не найден). В противном случае во второй строке переменной присваевается имя запрашиваемого файла. В третьей строке в файл-шаблон вставляется запрашиваемый документ, если он найден, либо 404 страничка в случае ошибки.

Вот и все. Теперь при запросе страницы "http://my.site/links.htm", она будет автоматически вставлена в файл index.php, который в нашем случае является файлом-шаблоном.

Но сразу оговорюсь, что приведенный фрагмент кода лишь демонстрация работы предложенного метода. В частности, необходимо избежать рекруссии. То есть если пользователь введет безобидный на первый взгляд адрес "http://my.site/index.php". Произойдет вставка файла-шаблона самого в себя, вставленный фрагмент опять вставит себя и так до бесконечности. Чтобы избежать этого необходимо произвести проверку, не является ли запрашиваемый файл нашим скриптом (пример на PHP):
($SCRIPT_FILENAME!=$DOCUMENT_ROOT.$REQUEST_URI)

Если же для создания своего динамического сайта Вы используете базы данных MySQL, то код обработки URL будет совершенно иной. Его обсуждение выходит за рамки данной статьи.

Действие директив модуля "mod_rewrite" распространяется и на все вложенные директории, начиная с той в в которой находится файл .htaccess. То есть если он лежит в корне сервера, то распространяет свое влияние на весь сервер. И чтобы, к примеру, исключить папку "stats" от обработки через наш файл-шаблон необходимо модернизировать .htaccess следующим образом:
RewriteEngine on
RewriteRule ^stats/.*$ - [L]
RewriteRule !\.(gif|jpg|zip|js)$ /my.site/index.php

Новое правило во второй строке исключает папку "stats" из обработки и останавливает дальнейшее исполнение инструкций файла .htaccess.

В статье не рассмотрены все варианты использования модуля "mod_rewrite", которые не ограничиваются вышеописанным в статье. За дополнительной информацией необходимо обратиться к документации вэб-сервера APACHE.

Домашняя страница автора: http://info.net.ru/

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com