VITRAGE: Теория
· Компиляция и установка
· Идеология VITRAGE
· Оптимизация HTML
· Создание виртуальных хостов
· Создание структуры доменов
· Ваш собственный язык гипертекстовой разметки
 
Практика
· Немного о стилях парсинга
· Примеры использования
· Работающие сайты
· Хостинги
· Вопросы и ответы
· Задать вопрос
· E-mail
 
О модуле
· Что такое VITRAGE
· История модуля
· Загрузить модуль
· Документация целиком
· Загрузить документацию в формате MS Word
· Слово автора
· English version
 
Технология VITRAGE
Один из витражей города Иркутска
Исходный код
· VHTML-код этой страницы (в новом окне)
· VHTML-код файла vitrage (в новом окне)
 
· Применение 3. Преобразование структуры каталогов в структуру доменов

Еще одна задачей, которая может возникнуть перед веб-разработчиком, - это сопоставление структуры каталогов и структуры доменов. Поясним эту задачу на примере.

Предположим, что разработчик имеет следующее описание домена в файле конфигурации Apache (httpd.conf):

<VirtualHost 10.1.1.1>
ServerName domain.ru
ServerAdmin webmaster@domain.ru
DocumentRoot /home/web/domain.ru/www
ErrorLog /home/web/domain.ru/log/error.log
CustomLog /home/web/domain.ru/log/access.log common
CustomLog /home/web/domain.ru/log/referer.log referer
CustomLog /home/web/domain.ru/log/agent.log agent
</VirtualHost>

Прежде всего, это означает, что в каталоге /home/web/domain.ru/www находится содержимое сайта, вызываемого по адресу domain.ru. Очевидно, что в этом каталоге могут находиться подкаталоги, каждый из которых будет доступен по адресу http://domain.ru/каталог/.

Сущность описываемой задачи заключается в следующем: поставить в соответствие каждому из подкаталогов каталога /home/web/domain.ru/www домен вида каталог.domain.ru. Более того, подкаталогам большей вложенности должны соответствовать поддомены вида подкаталог.каталог.domain.ru.

Если такая задача будет решена, то для следующей структуры каталогов:

/home/web/domain.ru/www/
/home/web/domain.ru/www/catalog1/
/home/web/domain.ru/www/catalog1/subcatalog1/
/home/web/domain.ru/www/catalog2/
/home/web/domain.ru/www/catalog2/subcatalog1/
/home/web/domain.ru/www/catalog2/subcatalog1/anothercatalog/
/home/web/domain.ru/www/catalog2/subcatalog2/

должны соответственно функционировать домены

domain.ru
catalog1.domain.ru
subcatalog1.catalog1.domain.ru
catalog2.domain.ru
subcatalog1.catalog2.domain.ru
anothercatalog.subcatalog1.catalog2.domain.ru
subcatalog2.catalog2.domain.ru

При этом, что вполне логично, к содержимому каталога /home/web/domain.ru/www/catalog2/subcatalog1/anothercatalog/ будут вести следующие адреса:

http://domain.ru/catalog2/subcatalog1/anothercatalog/
http://catalog2.domain.ru/subcatalog1/anothercatalog/
http://subcatalog1.catalog2.domain.ru/anothercatalog/
http://anothercatalog.subcatalog1.catalog2.domain.ru/

Для решения подобной задачи (назовем ее задачей преобразования структуры каталогов в структуру доменов) имеет смысл воспользоваться услугами модуля VITRAGE. Для этого обратим внимание на два ключевых слова, указываемых в секции VirtualHost файла httpd.conf и отвечающих за подобное преобразование: VGBaseDomain и VGBaseSubLevel.

Эти ключевые слова нельзя использовать в файлах .htaccess в силу логической последовательности восприятия ключевых слов и обработки каталогов веб-сервером Apache.

Ключевое слово VGBaseDomain предназначено для указания "базового домена", то есть домена самого верхнего уровня, для которого будут формироваться поддомены. Чаще всего значение VGBaseDomain совпадает со значением параметра ServerName, который описывается в секции VirtualHost (хотя это вовсе не обязательно!). Для нашего примера строка в httpd.conf, задающая значение параметра VGBaseDomain будет выглядеть следующим образом:

VGBaseDomain domain.ru

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

Второе ключевое слово - VGBaseSubLevel - имеет смысл только при описанном параметре VGBaseDomain и позволяет задать максимальный уровень вложенности каталогов, подлежащих преобразованию в домены. Этот параметр может принимать значение любого неотрицательного целого числа, начиная с "0" (по умолчанию; уровень вложенности не ограничен).

Для описанной выше задачи в ее неизменном варианте, вероятнее всего, наиболее подойдет значение параметра VGBaseSubLevel, равное "0" (отсутствие каких-либо ограничений):

VGBaseSubLevel 0

Если мы усложним задачу и потребуем, чтобы преобразованию подвергались все подкаталоги до второго уровня вложенности включительно (то есть не должен преобразовываться каталог anothercatalog), нам потребуется указать следующее описание параметра:

VGBaseSubLevel 2

Если нас интересуют только подкаталоги первого уровня (соответствующие в примере доменам catalog1.domain.ru и catalog2.domain.ru), то строка конфигурации будет выглядеть так:

VGBaseSubLevel 1

И снова не следует забывать, что данная схема не будет работать без соответствующей настройки DNS. Все образуемые доменные имена должны быть соответствующим образом описаны, а их IP-адреса должны совпадать с IP-адресом, указанному в конфигурации Apache для виртуального хоста (в примере - 10.1.1.1). Каждый поддомен может быть описан в конфигурационном файле DNS индивидуально, можно также воспользоваться записью вида

*   A   10.1.1.1

для описания "полного набора" поддоменов.

Обратим внимание и на то, что совет, приведенный в конце предыдущего раздела руководства (о внимательном отношении к настройкам Apache, чувствительным к адресам виртуальных серверов и структуры каталогов), стоит принять во внимание и при использовании VITRAGE для преобразования структуры каталогов в структуру доменов.

Более того, при таком применении модуля вас может ждать еще одна проблема, суть которой проще всего показать на примере.

Допустим, мы имеем следующую структуру каталогов:

/
/img/
/img/main/
/products/
/services/

и следующие настройки модуля VITRAGE в соответствующей секции VirtualHost конфигурационного файла Apache (httpd.conf):

VGBaseDomain my.domain.ru
VGBaseSubLevel 0

Таким образом, доступными окажутся домены my.domain.ru, img.my.domain.ru, main.img.my.domain.ru, products.my.domain.ru и services.domain.ru.

Допустим также, что в каталоге products находится файл index.html, в котором используются ссылки на изображения, хранящиеся в каталогах /img и /img/main/:

<a href="../img/main/image.jpg"><img src="/img/image.jpg" width=30 height=40 alt="" border=0></a>

Очевидно, что данный код будет работоспособным, если запрос к странице будет выглядеть как http://my.domain.ru/products/index.html. Но вот если мы попытаемся получить эту страницу запросом http://products.my.domain.ru/index.html, то изображение отображаться не будет, а также не будет функционировать ссылка. Действительно, для домена products.my.domain.ru файл index.html уже находится в "корневом" каталоге, для которого каталогов /img/ и ../img/main/ не существует.

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

<a href="http://main.img.my.domain.ru/image.jpg"><img src="http://img.my.domain.ru/image.jpg" width=30 height=40 alt="" border=0></a>

или такой:

<a href="http://img.my.domain.ru/main/image.jpg"><img src="http://my.domain.ru/img/image.jpg" width=30 height=40 alt="" border=0></a>

Применяя VITRAGE для преобразования структуры каталогов в структуру доменов, необходимо помнить, что доменные имена не зависят от регистра их написания, в связи с чем следует создавать соответствующие доменам каталоги только с использованием строчных букв.