2012-05-02 12 views
6

Hay muchas preguntas SO que parecen abordar las variaciones de esta pregunta. Pero tienden a ser respuestas de expresiones regulares complejas y espero poder encontrar algo más simple.Obtiene el dominio raíz de location.host

valores location.host dado de

foo.mysite.com 
app.foo.mysite.com 
mysite.com 

¿Cómo puedo obtener el dominio raíz mysite.com?

Podría hacer algo así como encontrar el penúltimo ., pero esto parece feo y no funcionaría para ningún TLD como .co.uk. Si jQuery tiene un objeto que contiene esta información, me complace utilizarlo.

Mi objetivo es crear cookies que existen en todos los subdominios. Para hacer esto, necesito encontrar .mysite.com. Prefiero no codificarlo.

+0

dado una lista de dominios de nivel superior válido no debería ser difícil, en lugar del penúltimo '.' quieres el primer' .' ​​(readin g de derecha a izquierda) después del TLD. Podría hacer esto con una gran expresión regular o un bucle, pero este último normalmente sería menos eficiente. – jimw

+0

Una lista completa se puede encontrar aquí: http://publicsuffix.org/ Si usas una expresión regular o de alguna otra manera no supondrá una gran diferencia, supongo. En cualquier caso, debe considerar todos los TLD y SLD públicos. Eche un vistazo a http://stackoverflow.com/questions/4452916/need-a-regular-expression-to-capture-second-level-domain-sld. –

+0

Hay un proyecto para hacer esto en https://github.com/riffraff/publicsuffix.js pero dice que está "roto". No lo he intentado, pero podría ser la base de tu solución. –

Respuesta

7

Dada la extremadamente baja probabilidad de que nuestro dominio volvería a cambiar de otra cosa que no sea .com, y mucho menos a un SLD, codifiqué algo como esto en .

var temp = location.host.split('.').reverse(); 
var root_domain = '.' + temp[1] + '.' + temp[0]; 

la sobrecarga y el mantenimiento de mantenimiento de un dominio de nivel superior o lista de SLD y comparando contra ella no vale la pena la compensación para nosotros.

+0

[biblioteca tldjs] (https://www.npmjs.com/package/tldjs) se puede utilizar si desea evitar el mantenimiento usted mismo.Se basa en la lista de sufijos públicos de Mozilla –

3

No puede llamar a .co.uk como TLD. En realidad es un second level domain. Entonces siempre será ambiguo que cuál es el dominio raíz.
Sin embargo, puede enumerar todos los TLD y dominios de segundo nivel disponibles e intentar encontrar una coincidencia. Pero esa será una operación muy costosa y tediosa.
Si desea hacer esto, esto List of TLDs and SLDs podría ser útil:

1

si lo quieres todo en una línea -

document.domain.split('.').reverse().splice(0,2).reverse().join('.') 

o

location.hostname.split('.').reverse().splice(0,2).reverse().join('.') 

para las entradas: 'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

Volverá: 'example.com'

+0

No funcionará para los dominios 'co.uk', por ejemplo. –

Cuestiones relacionadas