7
votes

Obtenir le domaine racine de l'emplacement.host

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

Emplacement donné.Host valeurs de xxx

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

Je pourrais faire quelque chose comme trouver la seconde pour durer . , mais cela semble laid et ne fonctionnerait pas pour des TLD comme .co.uk . . Si JQuery a un objet contenant ces informations, je suis heureux de l'utiliser.

Mon objectif est de créer des cookies existant dans tous les sous-domaines. Pour ce faire, j'ai besoin de trouver .mysite.com . Je préférerais ne pas le corriger.


6 commentaires

Compte tenu d'une liste de TLD valides, cela ne devrait pas être difficile - au lieu de la seconde pour durer . Vous voulez le premier . (lecture de droite à gauche) après le TLD . Vous pouvez le faire avec une grande réégycle ou une boucle, mais ce dernier serait généralement moins efficace.


Une liste complète peut être trouvée ici: Publicsuffix.org Que vous utilisiez une regex ou une autre manière ne fera pas grand chose d'une différence que je suppose. En tout cas, vous devez considérer tous les TLD et SLDS publics. Jetez un coup d'œil à Stackoverflow.com/Questtions/4452916/... .


Il y a un projet de faire cela à github.com/riffraff/publicsuffix.js mais il prétend être brisé." Je n'ai pas essayé mais cela pourrait constituer la base de votre solution.


@Felixkling - merci, c'est parfait. Voter pour fermer ma propre question.


Si cela vous a vraiment aidé, vous pouvez également simplement supprimer votre question ... en disant :) Codage heureux!


Il existe des pays avec des domaines optionnels de 2e niveau (c'est-à-dire un certain domaine.xy et certains-domain.co.xy sont valides). Je ne pense pas que vous puissiez faire une solution générique (raisonnablement petite). Il suffit de mettre la constante dans un fichier de configuration et de l'imprimer si nécessaire.


5 Réponses :


4
votes

Vous ne pouvez pas appeler .co.uk comme TLD. Il est en fait un Deuxième domaine . Il sera donc toujours ambigu que quel est le domaine racine.
Cependant, vous pouvez répertorier tous les domaines de la TLD et le deuxième niveau disponibles et essayer de trouver un match. Mais ce sera une opération très coûteuse et fastidieuse.
Si vous voulez faire cela, cette Liste des TLDS et SLDS pourrait être utile:


0 commentaires

9
votes

Compte tenu de la probabilité extrêmement faible que notre domaine change de quoi que ce soit autre chose que .com, encore moins à une SLD, j'ai codé quelque chose comme ça. XXX

La surcharge et la maintenance de Maintenir une liste de TLD ou de SLD et de comparer contre cela ne vaut pas la rémunération pour nous.


2 commentaires

La bibliothèque TLDJS peut être utilisée si vous souhaitez éviter l'entretien vous-même. Il est basé sur la liste de suffixe publique de Mozilla


Vous voudrez peut-être utiliser emplacement.hostname plutôt que hôte - voir Stackoverflow.com/questions/6725890/...



7
votes

Si vous voulez tout sur une ligne - xxx

ou xxx

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

Il retournera: ' example.com '< / code>


0 commentaires

2
votes

J'utilise ceci:

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


0 commentaires

1
votes
const rootDomain = '.' + window.location.hostname.split('.').slice(-2).join('.');

3 commentaires

Bien que ce code puisse résoudre le problème, une bonne réponse doit également expliquer quel le code fait et comment cela aide.


@BDL Ce code est assez standard et expliquant de soi. Que pensez-vous de plus?


Je vous suggère de couper cela vers const racinedomaine = emplacement.hostname.split ('.'). Slice (-2) .join ('.');