На самом деле не существует 100% динамического решения - я просто пытался понять это, и из-за различных расширений домена (DTL) эта задача была бы действительно сложной без фактического анализа всех этих расширений и проверки их каждый раз:
.com vs .co.uk vs org.uk
Самый надежный вариант - определить константу (или запись в базе данных и т. Д.), Которая хранит фактическое доменное имя, и удалить ее из $_SERVER['SERVER_NAME']
использования.substr()
defined("DOMAIN")
|| define("DOMAIN", 'mymaindomain.co.uk');
function getSubDomain() {
if (empty($_SERVER['SERVER_NAME'])) {
return null;
}
$subDomain = substr($_SERVER['SERVER_NAME'], 0, -(strlen(DOMAIN)));
if (empty($subDomain)) {
return null;
}
return rtrim($subDomain, '.');
}
Теперь, если вы используете эту функцию, http://test.mymaindomain.co.uk
она даст вам test
или, если у вас есть несколько уровней поддоменов, http://another.test.mymaindomain.co.uk
вы получите another.test
- если, конечно, вы не обновите DOMAIN
.
Надеюсь, это поможет.