Задать вопрос
@NinjaNickName
Web разработчик

Как правильно реализовать многосайтовость на одной CMS?

Доброго дня, хочу реализовать многосайтовость (десятки-сотни сайтов) на одном экземпляре CMS.
Интересует 2 вопроса, первый, по существу:
1) Достаточно ли проверять и роутить запросы на основе $_SERVER['HTTP_HOST'] \ $_SERVER['SERVER_NAME'] ? Возможно имеет смысл использовать $_ENV ?
Мысль следующая: грубо говоря, если $_SERVER['SERVER_NAME'] == 'example.com', подтягивать настройки для example.com и передавать в бутстрап;
$domens = array ('example.com');

if ($_SERVER['HTTP_HOST'] == $_SERVER['SERVER_NAME']) {
	// Мы знаем, что HTTP HOST, и даже SERVER_NAME можно подделать,
	// поэтому проверяем корректность данных
	if (!preg_match("/^[a-z0-9.]+$/i", $_SERVER['SERVER_NAME'])) {
		echo 'Некорректный HTTP HOST или SERVER_NAME';
		exit();
	}
	
	$host = $_SERVER['SERVER_NAME'];
	// Проверяем если запрошенный хост в нашей базе (предположим база в массиве)
	if (in_array($host, $domens)) {
		// передаем конфиги и запускаем сайт
	}
} else {
	echo 'HTTP_HOST != SERVER_NAME. Why?';
	exit();
}

(надеюсь понятно, что это только для примера и в реальном проекте код будет отличатся)
Имеет ли смысл проверять $_SERVER['HTTP_HOST'] == $_SERVER['SERVER_NAME'] ?
На сколько это правильное решение? Есть ли альтернативы?

Второй вопрос, продолжение первого, какие минусы есть у этого решения? Может быть реализация такой функциональности делается совсем иначе?
  • Вопрос задан
  • 197 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@NinjaNickName Автор вопроса
Web разработчик
Частично ответ нашел тут: Об одной малоизвестной уязвимости в веб сайтах

В общем, по итогу ответ такой, да, вполне рабочее решение, такой код имеет право на жизнь.

Имеет ли смысл проверять $_SERVER['HTTP_HOST'] == $_SERVER['SERVER_NAME'] ?

Это зависит от настроек веб сервера, HTTP_HOST не всегда равен SERVER_NAME, но если все правильно настроить, то HTTP_HOST должен быть равен SERVER_NAME; Думаю смысла проверять нет, достаточно проверить SERVER_NAME, поправьте, если ошибаюсь.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы