2012-05-02 18 views
6

Istnieje wiele pytań SO, które wydają się odnosić do odmian tego pytania. Ale są to złożone odpowiedzi i mam nadzieję, że znajdę coś prostszego.Pobierz domenę root z location.host

Podane wartości location.host z

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

Jak mogę dostać domenę główną mysite.com?

Mogłem zrobić coś takiego jak znalezienie drugiego do ostatniego ., ale wydaje się to brzydkie i nie działałoby dla żadnej domeny TLD, takiej jak .co.uk. Jeśli jQuery ma obiekt zawierający te informacje, chętnie go wykorzystam.

Moim celem jest tworzenie plików cookie, które istnieją we wszystkich subdomenach. Aby to zrobić, muszę znaleźć .mysite.com. Wolałbym nie zakodować go na stałe.

+0

Biorąc pod uwagę listę ważnego TLD nie powinno być trudne - zamiast sekundy, aby "' '' 'masz pierwsze' .' (readin g od prawej do lewej) po TLD. Można to zrobić za pomocą dużego wyraŜenia regularnego lub pętli, ale te ostatnie będą zazwyczaj mniej wydajne. – jimw

+0

Pełna lista znajduje się tutaj: http://publicsuffix.org/ Bez względu na to, czy korzystasz z wyrażenia regularnego, czy też w inny sposób, nie ma większego znaczenia. W każdym razie musisz wziąć pod uwagę wszystkie publiczne TLD i SLD. Zajrzyj na http://stackoverflow.com/questions/4452916/need-a-regular-expression-to-capture-second-level-domain-sld. –

+0

Na stronie https://github.com/riffraff/publicsuffix.js jest projekt, który jednak jest "uszkodzony". Nie próbowałem tego, ale mogłoby to stanowić podstawę twojego rozwiązania. –

Odpowiedz

7

Biorąc pod uwagę bardzo niskie prawdopodobieństwo, że nasza domena kiedykolwiek zmieni się z niczym innym niż .com, nie mówiąc już do SLD, mam zakodowany w coś takiego

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

Naprawa i konserwacja utrzymania listy TLD lub SLD i porównywanie jej nie jest opłacalna.

+0

[biblioteka tldjs] (https://www.npmjs.com/package/tldjs) może być używana, jeśli chcesz uniknąć konserwacji.Opiera się na publicznej liście sufiksów Mozilli –

3

Nie można wywołać domeny .co.uk jako TLD. W rzeczywistości jest to second level domain. Więc zawsze będzie niejednoznaczne, co to jest domena root.
Jednak można wyświetlić listę wszystkich dostępnych domen TLD i drugiego poziomu i spróbować znaleźć dopasowanie. Będzie to jednak bardzo kosztowna i żmudna operacja.
Jeśli chcesz to zrobić, to List of TLDs and SLDs może być przydatna:

1

jeśli chcesz to wszystko w jednej linii -

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

lub

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

dla wejść 'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

powróci: 'example.com'

+0

Nie działa na przykład w domenach "co.uk". –