горячая выпечка CMS БОРИС ВОЛЬФСОН Спецвыпуск: Хакер, номер #073, стр. 073-068-2 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA] </IfModule> Этот код указывает веб-серверу, что необходимо использовать движок для перезаписи адресов, и с помощью регулярного выражения задает правило преобразования. [статические страницы] Теперь все запросы будут переадресовываться на наш файл index.php. Хотелось бы его создать и реализовать логику, но сначала стоит немного подумать. Где у нас будет храниться содержимое страниц? Есть два варианта: в файле или в базе данных. Старые решения хранили инфу в текстовых файлах, ведь базы данных были доступны не на всех хостингах. Сейчас ситуация в корне поменялась: на любом хостинге имеется доступ к базе данных, так что грех ее не использовать. Для хранения содержимого страниц заведем таблицу pages. У нее будет три поля: page_id будет играть роль ключа, title хранить название странички, а body ее содержимое. Для создания таблицы можно использовать следующий простой скрипт на языке SQL. CREATE TABLE `pages` ( `page_id` tinyint(4) NOT NULL auto_increment, `title` longtext, `body` longtext NOT NULL, PRIMARY KEY (`page_id`) ); [выбираем кодировку] В системах управления сайтами сейчас просматривается тенденция использования универсальной кодировки Unicode. Причем на нее переходят и системы, изначально ее не использовавшие. Я предлагаю использовать Unicode сразу, чтобы в дальнейшем избежать проблем. Дабы браузер понял, в какой кодировке мы работаем, надо прописать следующую строчку перед выводом HTML: header('Content-Type: text/html; charset=utf-8'); Она будет передана в заголовке, и браузер поймет, какую кодировку надо использовать. [строка запроса] Чтобы разобрать строку запроса, которая передается в наш скрипт, я сделал специальный класс. Пользоваться им довольно удобно, так как при инициализации он разбирает строку и дает к ней очень удобный интерфейс доступа через массив $splited_query. В этом массиве содержится разбитая строка запроса и переменнаю $action, которая содержит первый элемент строки запроса – обычно это некое действие, например, «показать страницу». class Query { public $action = ''; public $page_id = ''; public $query = ''; public $splited_query = null; function __construct() { $this->query = $_GET['q']; $this->splited_query = split('/', $_GET['q']); $this->action = $this->splited_query[0]; if ($this->action == "page") $this->page_id = $this->splited_query[1]; } } [обработка действий] Для начала поясню, что я понимаю под «действием». На самом деле все очень просто. Действие это значение $query->action, то есть первый параметр строки запроса. Если строка запроса представляет собой адрес www.example.com/page/4, то действием здесь будет являться “page”, что можно перевести как «покажи страницу с номером». |