суббота, 7 апреля 2007 г.

Динамический дорген

Цитата сообщения Humiliating
Непалимый дорвей

Динамический дорген - это просто



Ты всё ещё генеришь доры какими-то программами и переписываешь их в нужное место даже если они будут на твоих собственных доменах? И сколько ты тратишь на это времени? А тратишь ты его зря.


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


магия mod_rewrite


Чего только нельзя сделать с помощью этого черезвычайно полезного модуля.


Его задачей в нашем случае будет перенаправление запроса на соответствующую страничку, а если её не существует - на скрипт, который создаст нам эту страницу.


RewriteEngine On

##1
RewriteCond %{HTTP_HOST} !^$
#2
RewriteCond %{REQUEST_URI} ^/?([^/]+)$
#3
RewriteCond %{REQUEST_URI} !makepage.php
#4
RewriteRule ^(.*)?$ %{HTTP_HOST}/$1 [QSA,PT,L]

#5
RewriteCond %{REQUEST_URI} /$
RewriteRule ^(.*) %1/index.html [PT]

RewriteCond %{REQUEST_URI} /.+
#6
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
#7
RewriteRule ^(.*) %{DOCUMENT_ROOT}/makepage.php [L]

Теперь объясняю что здесь происходит:


1. Этот блок направляет урл вида http://domain.org/page.html на файл "domain.org/page.html". Т.е. файл будет браться из вложенной папки с именем, совпадающим с названием домена.


2. Эта строчка запрещает преобразовывать урлы, в которых есть папка. Т.е. урл вида http://domain.org/folder/page.html преобразовываться не будет. Это нужно для того, чтобы избежать зацикливания преобразований, а также чтобы была возможность ложить в папки общие для всех доменов файлы (картинки, стили и т.п.).


3. Строка запрещает преобразование урла, если этот урл - наш генератор страниц. Это опять же нужно для того, чтобы избежать зацикливания.


4. Собственно правило преобразования.


5. Преобразовываем пустой урл (http://domain.org/) в урл (http://domain.org/index.html). Это нужно для того, чтобы при отключенном отображении листинга директории (а я всегда отключаю его) и отсутствующем index.html сервер не выдавал "403 Forbidden", а нормально перенаправлял на генератор страницы.


6. Правило выполняется, если отсутствует запрашиваемый файл.


7. В этом случае перенаправляем запрос на скрипт-генератор (он у нас лежит в makepage.php).


Готово. Теперь переходим к генератору страниц.


генератор страниц


Задача генератора страниц - определить, какую страница и по какому кейворду нам нужна, сгенерировать её и записать на диск, чтобы в следующий раз при обращении к ней не тратить лишние ресурсы. Лежать он у нас будет в файле makepage.php. И вот его содержимое:


//Файл будем писать в директорию с названием, совпадающим с названием домена
$directory = $_SERVER['HTTP_HOST'];

//Определяем кейворд из адреса. Если генерим индексную страницу - выбираем кейворд каким-либо другим способом на твоё усмотрение
if( preg_match('#/?([^/]+)\.html$#',$_SERVER['REQUEST_URI'],$parts) )
{
$name = $parts[1];
$filename = (!empty($directory) ? $directory.'/' : '').$name.'.html';
$keyword = str_replace("-"," ",$name);
} else if( $_SERVER['REQUEST_URI'] == '/' || empty($_SERVER['REQUEST_URI'] ) )
{
$filename = (!empty($directory) ? $directory.'/' : '').'index.html';
$keyword = "SOME MAIN KEYWORD FOR THIS DOMAIN";
}

//Здесь при желании проверяем, можно ли генерить страницу на этот кейворд на данном домене (для избежания злонамеренного забивания ресурсов и диска недоброжелателями

//Генерим текст страницы (прикрутишь своё)
$text = "Страница про ".$keyword."
";

//Создаём директорию если она не существует
if( !empty($directory) && !file_exists($directory) )
mkdir($directory);

//Сохраняем файл
file_put_contents($filename,$text);

//Выдаём юзеру свежесгенерённый файл
include($filename);


Дальше ты можешь сам улучшать по желанию этот скрипт. Благо, простор для этого практически безграничен. Основа у тебя уже есть.


А пока ты можешь просто залить эти 2 файла в корень своего сайта, набрать в браузере нечто вида http://mydomain.org/test-keyword.html и увидеть сгенерированную страничку.


Теги:

Комментариев нет: