В релизе .NET Forge 6.0 была представлена технология многосайтовости. При помощи нее на одной копии можно создать несколько сайтов с разными доменными именами. Все сайты должны работать в пределах одного приложения. Таким образом, многосайтовость может работать и на виртуальном хостинге.
Настройка многосайтовости
В первую очередь нужно привязать домены к приложению. В случае выделенного сервера это делается в IIS Manager:
Аналогично можно настроить виртуальный хостинг
После настройки IIS необходимо создать структуру папок. Для каждого сайта создаем отдельную папку (site1, site2, site3). В корне сайта оставляем папки bin, bitrix, uploads, app_code, app_data, файлы web.config, global.asax и.т. д
Затем создаем собственно сайты через соответствующий интерфейс в Панели управления. На странице настройки сайта появился новый параметр «Перенаправить на папку» - все запросы к этому сайту будут направляться в эту папку.
Обязательно заполняем следующие параметры:
Доменное имя – вписываем доменное имя сайта - это необходимо для того чтобы правильно распознать текущий сайт
Перенаправить на папку – вписываем имя папки в которой располагаются файлы сайта – в эту папку будут перенаправляться запросы при обращении к сайту
URL сервера – тоже вписываем доменное имя – это нужно, чтобы правильно формировать ссылки на другие сайты
Все, теперь можно открыть страницу Решения и установить в созданный сайт свежее решение
Кросс-доменная аутентификация
Для того, чтобы пользователи, входя на сайт автоматически входили на сайты с других доменов, в настройки главного модуля добавлена опция «Распространять аутентификацию на все домены»
Для разработчиков
Внедрение механизма многосайтовости потребовало изменить работу с виртуальными путями. Возникла некоторая двойственность: например мы запрашиваем страницу по виртуальному пути ~/folder/page.aspx, а на деле выполняется страница ~/site/folder/page.aspx. И некоторый код продукта интерпретирует эти пути как клиентские (т.е. которые будут выводиться в HTML, преобразовываться в абсолютные) – например, меню или ссылки в настройках компонентов. Другая же часть кода считает их серверными путями к реальным файлам (например, страница редактирования файлов).
Поэтому, при разработке функционала, который будет работать в многосайтовой среде, необходимо отдавать себе отчет, как именно будет этот путь интерпретироваться. Это вынужденная мера.
В помощь разработчику созданы специальные методы у класса BXSite
- GetSitesForPath – возвращает список соответствующих серверному пути сайтов (в типовом случае это один сайт)
- GetUrlForPath – формирует URL для серверного пути. URL может получиться как с доменным именем, так и без него – зависит от того, лежит ли путь в контексте текущего сайта или нет.
Дополнительно есть вспомогательный класс BXSiteRemapUtility, который отвечает за преобразование серверных виртуальных путей в клиентские и назад. Процесс преобразования клиентского пути в серверный называется remap и соответствующие методы класса начинаются с этого слова.