2012-05-02 2 views
6

Есть много вопросов, которые, как представляется, затрагивают варианты этого вопроса. Но они, как правило, являются сложными регулярными ответами, и я надеюсь, что смогу найти что-то более простое.Получить корневой домен из location.host

Указанные значения location.host из

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

Как я могу получить корневой домен mysite.com?

Я мог бы сделать что-то вроде поиска второго, чтобы продлиться ., но это кажется уродливым и не будет работать для любых TLD, таких как .co.uk. Если у jQuery есть объект, содержащий эту информацию, я рад его использовать.

Моя цель - создать куки, которые существуют во всех поддоменах. Для этого мне нужно найти .mysite.com. Я бы предпочел не делать это жестко.

+0

Учитывая список действительного ДВА это не должно быть сложно - вместо второго - '.' вам нужен первый' .' (readin g справа налево) после TLD. Вы можете сделать это с помощью большого регулярного выражения или цикла, но последнее, как правило, будет менее эффективным. – jimw

+0

Полный список можно найти здесь: http://publicsuffix.org/ Если вы используете регулярное выражение или каким-либо другим способом, я не думаю, что это не имеет большого значения. В любом случае вам необходимо рассмотреть все общедоступные TLD и SLD. Посмотрите http://stackoverflow.com/questions/4452916/need-a-regular-expression-to-capture-second-level-domain-sld. –

+0

Есть проект для этого на https://github.com/riffraff/publicsuffix.js, но он утверждает, что он «сломан». Я не пробовал, но это могло бы стать основой для вашего решения. –

ответ

7

Учитывая крайне низкую вероятность, что наш домен будет когда-нибудь изменится от чего-либо, кроме .com, не говоря уже к SLD, я закодирован что-то подобное в .

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

накладные и обеспечение поддержания TLD или SLD список и сравнения с ним не стоит компромисс для нас.

+0

[tldjs library] (https://www.npmjs.com/package/tldjs) может использоваться, если вы хотите избежать обслуживания самостоятельно.Он основан на списке суффиксов Mozilla –

3

Вы не можете позвонить в .COM.uk как TLD. На самом деле это second level domain. Поэтому всегда будет двусмысленно, что это корневой домен.
Однако вы можете перечислить все доступные домены TLD и второго уровня и попытаться найти совпадение. Но это будет очень дорогостоящая и утомительная операция.
Если вы хотите, чтобы это сделать, это List of TLDs and SLDs может быть полезен:

1

если вы хотите все это на одной линии -

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

или

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

для входов: 'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

он вернется: 'example.com'

+0

Не будет работать, например, для доменов 'co.uk'. –

Смежные вопросы