Realmente no hay una solución 100% dinámica; solo he estado tratando de resolverlo también y, debido a las diferentes extensiones de dominio (DTL), esta tarea sería realmente difícil sin analizar todas estas extensiones y verificarlas cada vez:
.com vs .co.uk vs org.uk
La opción más confiable es definir una constante (o entrada de base de datos, etc.) que almacene el nombre de dominio real y lo elimine del $_SERVER['SERVER_NAME']
usosubstr()
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, '.');
}
Ahora, si está usando esta función debajo http://test.mymaindomain.co.uk
, obtendrá test
o si tiene múltiples niveles de subdominio, http://another.test.mymaindomain.co.uk
a another.test
menos que, por supuesto, actualice elDOMAIN
.
Espero que esto ayude.