Приложение «Сайт»: многосайтовость и маршрутизация

Содержание...

Фреймворк Вебасист позволяет использовать для создания сайтов все доступное ему адресное пространство. Например, если Вебасист доступен по адресу http://www.domain.ru/, то адреса страниц и разделов сайта, созданного на его основе, могут быть произвольными «внутри» этого адреса: http://www.domain.ru/about/, http://www.domain.ru/shop/adidas/superstar/, http://www.domain.ru/index.php?product=aeron-chair, http://www.domain.ru/blog/2011/?tag=dev и т. д. Исключение составляет только бекенд — адреса, занятые бекендом Вебасиста, всегда будут вести в бекенд, их нельзя задействовать под общедоступную часть сайта.

Вебасист полностью обрабатывает адрес, переданный ему браузером, разделяя его на две части:

1) базовая часть: адрес установки Вебасиста, включающий в себя доменное имя; в примере выше это http://www.domain.ru/
2) внутренняя часть: это остальной фрагмент после адреса установки фреймворка; в примерах выше это about/, shop/adidas/superstar/, index.php?product=aeron-chair и т. д.

В зависимости от этих двух частей управление передается тому или иному приложению согласно правилами маршрутизации (роутингу), которые задаются в системном файле роутинга wa-config/routing.php. Приложение «Сайт» предоставляет инструменты для управления маршрутизацией через веб-интерфейс и сохраняет маршрутизацию в этот файл. О технических деталях работы маршрутизации смотрите отдельную статью документации разработчика →.

Многосайтовость

(базовая часть адреса)

Одна установка Вебасиста позволяет создавать на своей основе сколь угодно много сайтов, работающих на разных доменах. Например, domain1.ru, subdomain.domain2.com, any-other-address.org — все эти сайты могут работать на базе одной установки Вебасиста. Для подключения нового сайта к установке Вебасиста необходимо выполнить следующие действия в приложении «Сайт»:

а) добавить доменное имя сайта:

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

При добавлении нового сайта приложение «Сайт» сохраняет его в системном файле роутинга wa-config/routing.php.

Маршрутизация и поселение приложений

(внутренняя часть адреса)

Приложение «Сайт» позволяет для каждого сайта (домена) указать произвольный набор правил маршрутизации, которые впоследствии позволят определять, какому приложению будет передано управление.

В данном примере для любого адреса внутри адресного пространства domain.ru/shop/* будет передано управление приложению «Сайт», domain.ru/blog/* — приложению «Блог», а если адрес не удовлетворяет ни одному из этих правил — приложению «Сайт».

Если же в данному примере пользователь перейдет по адресу domain.ru/contacts.aspx, то его перенаправит (с помощью HTTP-редиректа) на страницу domain.ru/contacts/, которая (согласно правилу domain.ru/*) будет обработана уже приложением «Сайт». В данном примере contacts.aspx трактуется Вебасистом как строка, а не обращение к внешнему скрипту (правило может быть указано любым: about.php, special-offers.html, index.php?params=value и т. д.). Правила могут быть заданы абсолютно произвольно. Например, при создании правила /about/ на сервере физически не создаётся папка about/. Правило — это только шаблон для обработки (разбора) адреса, по которому обращается посетитель сайта.

Правила обрабатываются одно за другим в порядке, указанном в файле wa-config/routing.php (и в настройках приложения «Сайт» соответственно). Если встретилось правило, которое удовлетворяет текущему запросу пользователя, то управление передается соответствующему приложению, и остальные правила уже не проверяются. Для соответствия произвольной группе символов используется символ * («звёздочка»). Например, правила shop/ и shop/* являются разными, потому что первое правило удовлетворяет только единственному адресу domain.ru/shop/, а второе правило — любым адресам внутри «папки» shop: domain.ru/shop/product/phones/iphone/, domain.ru/shop/about/, domain.ru/shop/index.php?param=value и прочим. Часть адреса после shop/ передается приложению, с которым связано правило маршрутизации, и далее приложение уже само определяет дальнейшее поведение сайта (какую страницу показать, какое действие выполнить).

Приложения, объединённые в один сайт разными правилами маршрутизации, независимы и могут совершенно не взаимодействовать друг с другом. Можно провести аналогию с тем случаем, как если бы в разные папки на сервере были установлены скрипты от разных производителей. Они работают независимо друг от друга и составляют один сайт только за счёт внешнего вида, взаимных ссылок в навигации сайта и взаимного обмена данными, если таковой реализован.

Поселения

Термин «поселение» несколько неформален, однако хорошо отражает природу размещения общедоступных частей приложений на сайте. Подключая приложение правилом маршрутизации, вы селите приложение на свой сайт. Любое приложение может быть установлено в Вебасисте только один раз, а на сайте иметь несколько поселений, то есть занимать несколько адресных подмножеств. Например, приложение «Блог» на сайте можно подключить несколько раз (несколькими правилами) по разным адресам: /blog/ru/*, /blog/en/, /photoblog/* и т. п., причем так, что оформление у каждого из этих поселений будет разное. Это достигается за счет того, что у каждого поселения приложения имеется свой собственный набор настроек: выбор темы оформления, индивидуальные настройки приложения, произвольный набор параметров.

$wa->apps()

Для удобства создания сайтов с несколькими поселениями можно использовать массив, возвращаемый функцией $wa->apps(). Согласно структуре этого массива формируется основное меню навигации в большинстве тем оформления. По умолчанию массив определяется автоматически согласно правилами маршрутизации и, следовательно, отражает текущую структуру маршрутизации сайта. По желанию можно переключить настройку $wa->apps() на определение вручную, и это никак не повлияет на функциональную работу сайта.