2009-08-15 19 views

Respuesta

28
var full = window.location.host 
//window.location.host is subdomain.domain.com 
var parts = full.split('.') 
var sub = parts[0] 
var domain = parts[1] 
var type = parts[2] 
//sub is 'subdomain', 'domain', type is 'com' 
var newUrl = 'http://' + domain + '.' + type + '/your/other/path/' + subDomain 
window.open(newUrl); 
+0

¡Gracias, funciona! –

+20

¿Qué sucede si el dominio es google.co.uk? Esto devolverá el subdominio incorrecto. – TLK

+2

Para obtener solo el subdominio: window.location.host.split ('.') [0]; –

12

La respuesta proporcionada por Derek funcionará en los casos más comunes, pero no funcionará para subdominios "xxx.xxx", o "host.co.uk". (también, usando window.location.host, también recuperará el número de puerto, que no se trata: http://www.w3schools.com/jsref/prop_loc_host.asp)

Para ser sincero, no veo una solución perfecta para este problema. Personalmente, he creado un método para la división de nombres de host que uso muy a menudo porque cubre una gran cantidad de nombres de host.

Este método divide el nombre de host en {domain: "", type: "", subdomain: ""}

function splitHostname() { 
     var result = {}; 
     var regexParse = new RegExp('([a-z\-0-9]{2,63})\.([a-z\.]{2,5})$'); 
     var urlParts = regexParse.exec(window.location.hostname); 
     result.domain = urlParts[1]; 
     result.type = urlParts[2]; 
     result.subdomain = window.location.hostname.replace(result.domain + '.' + result.type, '').slice(0, -1);; 
     return result; 
} 

console.log(splitHostname()); 

Este método sólo devuelve el subdominio como una cadena:

function getSubdomain(hostname) { 
     var regexParse = new RegExp('[a-z\-0-9]{2,63}\.[a-z\.]{2,5}$'); 
     var urlParts = regexParse.exec(hostname); 
     return hostname.replace(urlParts[0],'').slice(0, -1); 
} 

console.log(getSubdomain(window.location.hostname)); 
// for use in node with express: getSubdomain(req.hostname) 

Estos dos métodos funcionarán para dominios más comunes (incluyendo co.uk) NOTA: el slice al final de los subdominios es para eliminar el punto extra.

Espero que esto resuelva su problema.

+1

La mejor y más precisa respuesta que he encontrado, gracias – webdevinci

+0

Utilicé la solución de Dereks y me metí en problemas cuando de repente no lo hice. t tiene un subdominio La respuesta de Vlads funciona mejor en mi caso. – MartinJH

1

Las soluciones proporcionadas aquí funcionan algunas veces, o incluso la mayor parte del tiempo, pero no en todas partes. Que yo sepa, la mejor manera de encontrar el subdominio completo de cualquier dominio (y recuerde, a veces los subdominios también tienen períodos en ellos) Puede usar subdominios, etc.) para usar el Public Suffix List, que se mantiene por Mozilla.

La parte de la URL que no está en la lista de sufijos públicos es el subdominio más el dominio en sí, unido por un punto. Una vez que elimine el sufijo público, puede eliminar el dominio y dejar solo el subdominio eliminando el último segmento entre los puntos.

Veamos un ejemplo complicado. Supongamos que está probando sub.sub.example.pvt.k12.ma.us. pvt.k12.ma.us es un sufijo público, lo creas o no! Por lo tanto, si utilizó la Lista de sufijos públicos, podrá convertirla rápidamente en sub.sub.example eliminando el sufijo conocido. Luego, puede pasar de sub.sub.example a solo sub.sub después de eliminar la última porción de las piezas restantes, que era el dominio. sub.sub es su subdominio.

Cuestiones relacionadas