Я пытаюсь извлечь поддомен из значения HTTP_HOST. Однако я наткнулся на проблему, когда, если в поддомене есть более одной точки, он не может соответствовать должным образом. Учитывая, что это скрипт для запуска на нескольких разных доменах, и он может иметь неограниченное количество точек, и tld может состоять из 1 или 2 частей (и любой длины) - существует ли практический способ для правильного соответствия субдомена, домена и тдл во всех ситуациях?
Так, например, возьмите следующие значения HTTP_HOST и то, что требуется сопоставить.
- www.buggedcom.co.uk
- Субдомен: www
- Домен: buggedcom.co.uk
- TLD: co.uk
- www.buggedcom.com
- Субдомен: www
- Домен: buggedcom.com
- TLD: com
- test.buggedcom.co.uk
- Поддомен: тест
- Домен: buggedcom.co.uk
- TLD: co.uk
- test.buggedcom.com
- Поддомен: тест
- Домен: buggedcom.com
- TLD: com
- multi.sub.test.buggedcom.co.uk
- Субдомен: multi.sub.test
- Домен: buggedcom.co.uk
- TLD: co.uk
- multi.sub.test.buggedcom.com
- Субдомен: multi.sub.test
- Домен: buggedcom.com
- TLD: com
Я предполагаю, что единственный способ сделать это - загрузить список tlds, что позволяет мне, возможно, не очень-то это делать, так как это в начале скрипта и действительно требует такой тяжелой работы. .
Ниже приведен текущий код.
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 добавить поддомен в качестве параметра get?