Я пытаюсь извлечь субдомен из значения HTTP_HOST. Однако я столкнулся с проблемой, когда, если в поддомене имеется более одной точки, он не подходит должным образом. Учитывая, что это сценарий для работы на нескольких разных доменах, и он может иметь неограниченное количество точек, а tld может быть либо 1 или 2 части (и любой длины) - существует ли практический способ правильного сопоставления субдомена, домена и во всех ситуациях?Выделение субдомена PHP HTTP_HOST, учитывая, что поддомен является подстановочным знаком и содержит более одного символа.
Так, например, допустим следующие значения HTTP_HOST и то, что требуется для соответствия.
- www.buggedcom.co.uk
- Subdomain: WWW
- Домен: buggedcom.co.uk
- TLD: co.uk
- WWW. buggedcom.com
- Subdomain: WWW
- Домен: buggedcom.com
- TLD: ком
- test.buggedcom.co.uk
- Subdomain: тест
- Домен: buggedcom.co .uk
- TLD: co.uk
- test.buggedcom.com
- Subdomain: тест
- Домен: buggedcom.com
- TLD: ком
- multi.sub.test.buggedcom.co.uk
- Поддомен: multi.sub.test
- Домен: buggedcom.co.uk
- TLD: co.uk
- multi.sub.test.buggedcom.com
- Subdomain: multi.sub.test
- Домен: buggedcom.ком
- TLD: ком
Я предполагаю, что единственный способ сделать это было бы загрузить список ДВУ, которые позволяют это возможно, я действительно не хочу, чтобы сделать, как это в начало сценария и должно действительно требовать такого тяжелого подъема.
Ниже приведен код.
define('HOST', isset($_SERVER['HTTP_HOST']) === true ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_ADDR']) === true ? $_SERVER['SERVER_ADDR'] : $_SERVER['SERVER_NAME']));
$domain_parts = explode('.', HOST);
$domain_parts_count = count($domain_parts);
if($domain_parts_count > 1)
{
$sub_parts = array_splice($domain_parts, 0, $domain_parts_count-3);
define('SUBDOMAIN', implode('.', $sub_parts));
unset($sub_parts);
}
else
{
define('SUBDOMAIN', '');
}
define('DOMAIN', implode('.', $domain_parts));
var_dump($domain_parts, SUBDOMAIN, DOMAIN);exit;
Просто подумал, что может mod_rewrite добавить поддомен как ПОЛУЧИТЬ пары?
Если сайт знал о своем правильном домене (в данном случае «buggedcom»), это было бы тривиально. Нет ли способа потребовать этого в каком-то файле конфигурации приложения? – bzlm
cms имеет архитектуру с несколькими сайтами. Фактический URL-адрес сайта загружается из базы данных дальше по конфигурации и основывается только на хосте. Я предполагаю, что определения субдомена/tld могут быть перемещены дальше по странице. – buggedcom