2009-08-15 6 views

Répondre

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

Merci, ça marche! –

+20

Que faire si le domaine est google.co.uk? Cela retournera le mauvais sous-domaine. – TLK

+2

Pour obtenir uniquement le sous-domaine: window.location.host.split ('.') [0]; –

12

La réponse fournie par Derek travaillera dans les cas les plus courants, mais ne fonctionnera pas pour « xxx.xxx » sous-domaines ou « host.co.uk ». (aussi, en utilisant window.location.host, va également récupérer le numéro de port, qui n'est pas traité: http://www.w3schools.com/jsref/prop_loc_host.asp)

Pour être honnête, je ne vois pas une solution parfaite pour ce problème. Personnellement, j'ai créé une méthode de fractionnement du nom d'hôte que j'utilise très souvent car elle couvre un plus grand nombre de noms d'hôtes.

Cette méthode divise le nom d'hôte dans {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()); 

Cette méthode ne retourne que le sous-domaine en tant que chaîne:

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) 

Ces deux méthodes fonctionnent pour les domaines les plus courants (y compris co.uk) NOTE: le slice à la fin des sous-domaines est de supprimer le point supplémentaire.

J'espère que cela résout votre problème.

+1

Meilleure et la réponse la plus précise que j'ai trouvé, merci – webdevinci

+0

J'ai utilisé la solution Dereks et ai eu des ennuis quand je n'ai soudainement pas ' t avoir un sous-domaine. Vlads répond mieux dans mon cas. – MartinJH

1

Les solutions fournies ici fonctionnent parfois, ou même la plupart du temps, mais pas partout. Au meilleur de ma connaissance, la meilleure façon de trouver le sous-domaine complet de domaine (et n'oubliez pas, parfois sous-domaines ont des périodes dans eux aussi! Vous pouvez avoir sous-sous-domaines, etc) est d'utiliser le Public Suffix List, qui est maintenu par Mozilla.

La partie de l'URL qui ne figure pas dans la liste publique des suffixes est le sous-domaine plus le domaine lui-même, joint par un point. Une fois que vous avez supprimé le suffixe public, vous pouvez supprimer le domaine et laisser uniquement le sous-domaine en supprimant le dernier segment entre les points.

Regardons un exemple compliqué. Dites que vous testez sub.sub.example.pvt.k12.ma.us. pvt.k12.ma.us est un suffixe public, croyez-le ou non! Donc, si vous utilisiez la liste des suffixes publics, vous seriez en mesure de transformer rapidement cela en sub.sub.example en supprimant le suffixe connu. Ensuite, vous pouvez passer de sub.sub.example à sub.sub après avoir enlevé la dernière partie des pièces restantes, qui était le domaine. sub.sub est votre sous-domaine.

Questions connexes