2012-05-02 33 views
6

Có rất nhiều câu hỏi SO dường như giải quyết các biến thể của câu hỏi này. Nhưng họ có xu hướng là câu trả lời phức tạp regex và tôi hy vọng tôi có thể tìm thấy một cái gì đó đơn giản hơn.Lấy tên miền gốc từ location.host

giá trị location.host Với ​​các

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

Làm thế nào tôi có thể nhận được các tên miền gốc mysite.com?

Tôi có thể làm điều gì đó giống như tìm kiếm thứ hai đến cuối ., nhưng điều này có vẻ xấu xí và sẽ không hoạt động đối với bất kỳ TLD nào giống như .co.uk. Nếu jQuery có một đối tượng chứa thông tin này, tôi rất vui khi sử dụng nó.

Mục tiêu của tôi là tạo cookie tồn tại trên tất cả các tên miền phụ. Để làm điều này tôi cần phải tìm .mysite.com. Tôi không muốn mã hóa nó.

+0

Cho một danh sách các tên miền cấp cao hợp lệ nó không phải là khó - thay vì thứ hai để cuối '.' bạn muốn đầu tiên' .' (readin g từ phải sang trái) sau TLD. Bạn có thể làm điều này với một regexp lớn hoặc một vòng lặp, nhưng sau này thường sẽ kém hiệu quả hơn. – jimw

+0

Một danh sách đầy đủ có thể được tìm thấy ở đây: http://publicsuffix.org/ Cho dù bạn sử dụng regex hay một số cách khác sẽ không tạo ra nhiều sự khác biệt mà tôi đoán. Trong mọi trường hợp, bạn phải xem xét tất cả các TLD và SLD công khai. Hãy xem http://stackoverflow.com/questions/4452916/need-a-regular-expression-to-capture-second-level-domain-sld. –

+0

Có một dự án để làm điều này tại https://github.com/riffraff/publicsuffix.js nhưng nó tuyên bố là "bị hỏng". Tôi đã không thử nó nhưng nó có thể tạo cơ sở cho giải pháp của bạn. –

Trả lời

7

Với khả năng rất thấp mà miền của chúng tôi sẽ không bao giờ thay đổi từ bất cứ điều gì khác hơn là .com, chứ chưa nói đến một SLD, tôi mã hóa một cái gì đó như thế này trong .

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

Việc duy trì và duy trì danh sách TLD hoặc SLD và so sánh nó không đáng để trao đổi với chúng tôi.

+0

[thư viện tldjs] (https://www.npmjs.com/package/tldjs) có thể được sử dụng nếu bạn muốn tránh việc tự bảo trì.Nó dựa trên danh sách hậu tố công khai của Mozilla –

3

Bạn không thể gọi .co.uk là TLD. Nó thực sự là một second level domain. Vì vậy, nó sẽ luôn luôn mơ hồ rằng tên miền gốc là gì.
Tuy nhiên, bạn có thể liệt kê tất cả các tên miền cấp cao nhất và cấp 2 của TLD và cố gắng tìm một kết quả phù hợp. Nhưng đó sẽ là một hoạt động rất tốn kém và tẻ nhạt.
Nếu bạn muốn làm điều này, List of TLDs and SLDs này có thể có ích:

1

nếu bạn muốn nó trên cùng một dòng -

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

hoặc

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

cho đầu vào: 'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

nó sẽ trở lại: 'example.com'

+0

Sẽ không hoạt động cho các miền 'co.uk', chẳng hạn. –

Các vấn đề liên quan