13 votes

Obtenir le domaine racine à partir de location.host

Il y a beaucoup de questions de l'OS qui semblent aborder des variations de cette question. Mais elles ont tendance à être des réponses complexes en regex et j'espère pouvoir trouver quelque chose de plus simple.

Compte tenu des valeurs location.host de

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

Comment puis-je obtenir le domaine racine mysite.com ?

Je pourrais faire quelque chose comme trouver l'avant-dernière . mais cela semble laid et ne fonctionnerait pas pour les TLD tels que .co.uk . Si jQuery a un objet qui contient cette information, je suis heureux de l'utiliser.

Mon objectif est de créer des cookies qui existent dans tous les sous-domaines. Pour ce faire, je dois trouver .mysite.com . Je préfère ne pas le coder en dur.

16voto

user3893517 Points 91

Si vous voulez tout sur une seule ligne -

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

ou

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

pour les entrées : 'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

il reviendra : 'example.com'

11voto

mrtsherman Points 19573

Étant donné la très faible probabilité que notre domaine passe d'une autre extension que .com, et encore moins d'un SLD, j'ai codé quelque chose comme ceci.

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

Les frais généraux et la maintenance liés à la tenue d'une liste de TLD ou de SLD et à la comparaison avec cette liste ne valent pas la peine pour nous.

7voto

Vous ne pouvez pas appeler le .co.uk comme TLD. Il s'agit en fait d'un domaine de second niveau . Il sera donc toujours ambigu de savoir quel est le domaine racine.
Vous pouvez toutefois dresser la liste de tous les TLD et domaines de deuxième niveau disponibles et essayer de trouver une correspondance. Mais ce sera une opération très coûteuse et fastidieuse.
Si vous voulez faire ça, ce Liste des TLD et SLD pourrait être utile :

3voto

Oli Dacombe Points 21

J'ai utilisé ça :

const rootDomain = s => {
    const r =  /.*\.([^.]*[^0-9][^.]*\.[^.]*[^.0-9][^.]*$)/;
    return s.replace(r, '$1');
};

Le résultat est similaire à celui de la méthode ci-dessus, qui utilise la division, l'inversion, etc., mais il ne modifie pas les adresses IP directes.

0voto

Danil Valov Points 462
const rootDomain = '.' + window.location.hostname.split('.').slice(-2).join('.');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X