รับโดเมนย่อยจาก URL


101

การรับโดเมนย่อยจาก URL นั้นฟังดูง่ายในตอนแรก

http://www.domain.example

สแกนหาช่วงแรกจากนั้นส่งคืนสิ่งที่ตามมาหลัง "http: //" ...

แล้วคุณจำไว้

http://super.duper.domain.example

โอ้. ถ้าอย่างนั้นคุณก็คิดว่าโอเคหาคาบสุดท้ายย้อนกลับคำและรับทุกอย่างก่อน!

แล้วคุณจำไว้

http://super.duper.domain.co.uk

และคุณกลับมาที่กำลังสอง ใครมีไอเดียดีๆนอกเหนือจากการจัดเก็บรายการ TLD ทั้งหมด


มีการถามคำถามนี้แล้วที่นี่: การแก้ไขส่วนต่างๆของ URL : มีการถามคำถามที่คล้ายกันที่นี่
:)

แคมคุณชี้แจงสิ่งที่คุณต้องการ? ดูเหมือนว่าคุณอยู่ตามส่วนโดเมน "อย่างเป็นทางการ" ของ URL (เช่น domain.co.uk) โดยไม่คำนึงว่าป้ายชื่อ DNS จะปรากฏอยู่ข้างหน้ากี่ป้ายก็ตาม
Alnitak

ฉันไม่คิดว่ามันจะเป็นคำถามเดียวกัน แต่ดูเหมือนว่าจะเป็นข้อมูลเพิ่มเติมเกี่ยวกับการตัดการดูแลระบบในชื่อโดเมนซึ่งไม่สามารถทำได้เพียงแค่ดูที่สตริง
Alnitak

ฉันเห็นด้วย. ขยายความเพิ่มเติมว่าเป้าหมายสุดท้ายของคุณคืออะไร
BuddyJoe

ดูคำตอบนี้: stackoverflow.com/a/39307593/530553
Ehsan Chavoshi

คำตอบ:


73

ใครมีไอเดียดีๆนอกเหนือจากการจัดเก็บรายการ TLD ทั้งหมด

ไม่ได้เนื่องจาก TLD แต่ละอันแตกต่างกันไปตามจำนวนโดเมนย่อยโดเมนระดับที่สองเป็นต้น

โปรดทราบว่ามีโดเมนระดับบนสุดโดเมนระดับที่สองและโดเมนย่อย ในทางเทคนิคแล้วทุกอย่างยกเว้น TLD เป็นโดเมนย่อย

ในตัวอย่าง domain.com.uk "domain" คือโดเมนย่อย "com" เป็นโดเมนระดับที่สองและ "uk" คือ TLD

ดังนั้นคำถามยังคงซับซ้อนกว่าในตอนแรกบลัชออนและขึ้นอยู่กับวิธีจัดการ TLD แต่ละอัน คุณจะต้องมีฐานข้อมูลของ TLD ทั้งหมดที่มีการแบ่งพาร์ติชันโดยเฉพาะและสิ่งที่นับเป็นโดเมนระดับที่สองและโดเมนย่อย แม้ว่าจะมี TLD ไม่มากเกินไปดังนั้นรายการจึงสามารถจัดการได้อย่างสมเหตุสมผล แต่การรวบรวมข้อมูลทั้งหมดนั้นไม่ใช่เรื่องเล็กน้อย อาจมีรายการดังกล่าวอยู่แล้ว

ดูเหมือนว่าhttp://publicsuffix.org/จะเป็นรายการหนึ่งซึ่งเป็นคำต่อท้ายทั่วไปทั้งหมด (. com, .co.uk ฯลฯ ) ในรายการที่เหมาะสำหรับการค้นหา การแยกวิเคราะห์ยังคงไม่ใช่เรื่องง่าย แต่อย่างน้อยคุณก็ไม่จำเป็นต้องรักษารายชื่อไว้

"คำต่อท้ายสาธารณะ" คือสิ่งที่ผู้ใช้อินเทอร์เน็ตสามารถลงทะเบียนชื่อได้โดยตรง ตัวอย่างบางส่วนของคำต่อท้ายสาธารณะ ได้แก่ ".com", ".co.uk" และ "pvt.k12.wy.us" Public Suffix List คือรายการของคำต่อท้ายสาธารณะที่รู้จักกันทั้งหมด

Public Suffix List เป็นโครงการริเริ่มของ Mozilla Foundation มีให้ใช้งานในซอฟต์แวร์ใด ๆ แต่เดิมสร้างขึ้นเพื่อตอบสนองความต้องการของผู้ผลิตเบราว์เซอร์ อนุญาตให้เบราว์เซอร์ตัวอย่างเช่น:

  • หลีกเลี่ยงการตั้งค่า "ซูเปอร์คุกกี้" ที่สร้างความเสียหายต่อความเป็นส่วนตัวสำหรับคำต่อท้ายชื่อโดเมนระดับสูง
  • เน้นส่วนที่สำคัญที่สุดของชื่อโดเมนในอินเทอร์เฟซผู้ใช้
  • จัดเรียงรายการประวัติตามไซต์อย่างถูกต้อง

เมื่อดูรายชื่อคุณจะเห็นว่าไม่ใช่ปัญหาเล็กน้อย ฉันคิดว่ารายการเป็นวิธีเดียวที่ถูกต้องในการทำสิ่งนี้ ...


Mozilla มีรหัสที่ใช้บริการนี้ โครงการนี้ถูกยกเลิกเนื่องจากข้อมูลจำเพาะของคุกกี้ดั้งเดิมได้เชื่อมโยง TLD กับความไว้วางใจในคุกกี้ แต่ไม่ได้ผล ข้อบกพร่อง "Cookie Monster" เป็นปัญหาแรกและสถาปัตยกรรมไม่ได้รับการแก้ไขหรือแทนที่
benc

ภาษาที่ต้องการแก้ปัญหานี้ไม่อยู่ในรายการ แต่มีโครงการโอเพนซอร์ซที่ใช้รายการนี้ในรหัส C # ที่นี่: code.google.com/p/domainname-parser
Dan Esparza

ไม่ว่าโดเมนจะเป็น "คำต่อท้ายสาธารณะ" หรือไม่ควรทำให้พร้อมใช้งานผ่านโปรโตคอล DNS เองโดยอาจใช้แฟล็ก EDNS ในกรณีนี้เจ้าของสามารถตั้งค่าได้และไม่จำเป็นต้องเก็บรักษารายการแยกต่างหาก
Pieter Ennes

@PieterEnnes EDNS ใช้สำหรับแฟล็ก "transport related" และไม่สามารถใช้สำหรับข้อมูลเมตาที่เกี่ยวข้องกับเนื้อหา ฉันยอมรับว่าข้อมูลนี้จะถูกวางไว้ใน DNS ได้ดีที่สุด ISTR มีแผนสำหรับ "เซสชัน BoF" ที่ IETF ที่กำลังจะมีขึ้นในแวนคูเวอร์เพื่อหารือเกี่ยวกับเรื่องนี้
Alnitak

26

ดังที่อดัมกล่าวว่าไม่ใช่เรื่องง่ายและในปัจจุบันวิธีเดียวที่ใช้ได้จริงคือการใช้รายการ

ถึงอย่างนั้นก็มีข้อยกเว้น - ตัวอย่างเช่น.ukมีโดเมนจำนวนหนึ่งที่ใช้ได้ทันทีในระดับนั้นที่ไม่ได้อยู่ใน.co.ukนั้นดังนั้นจึงต้องเพิ่มเป็นข้อยกเว้น

ปัจจุบันวิธีการหลักเบราว์เซอร์ทำเช่นนี้นี่คือ - มันเป็นสิ่งที่จำเป็นเพื่อให้มั่นใจว่าexample.co.ukไม่สามารถตั้งค่าคุกกี้สำหรับ.co.ukซึ่งก็จะถูกส่งไปยังเว็บไซต์อื่น ๆ .co.ukภายใต้

ข่าวดีก็คือว่ามีอยู่แล้วรายการที่มีอยู่ในhttp://publicsuffix.org/

นอกจากนี้ยังมีงานบางอย่างในIETFเพื่อสร้างมาตรฐานบางประเภทเพื่อให้ TLD สามารถประกาศได้ว่าโครงสร้างโดเมนของพวกเขามีลักษณะอย่างไร สิ่งนี้มีความซับซ้อนเล็กน้อยแม้ว่าจะมี.uk.comการกด.comไลค์ซึ่งดำเนินการราวกับว่าเป็นส่วนต่อท้ายสาธารณะ แต่รีจิสทรีไม่ได้ขาย


1
อ๊ะ IETF ควรรู้ดีกว่าปล่อยให้ URL ของพวกเขาตาย สามารถเข้าถึงแบบร่าง (อัปเดตล่าสุดในเดือนกันยายน 2555) ได้ที่นี่: tools.ietf.org/html/draft-pettersen-subtld-structure
IMSoP

ปิดคณะทำงาน IETF ในเรื่อง (DBOUND) แล้ว
Patrick Mevzek

โปรดทราบว่าเนื่องจากฉันเขียนสิ่งนี้.ukตอนนี้การลงทะเบียนโดเมนจึงอนุญาตให้ลงทะเบียนโดยตรงในระดับที่สอง สิ่งนี้สะท้อนให้เห็นตาม PSL
Alnitak

22

Publicsuffix.org ดูเหมือนว่าจะทำ มีการใช้งานมากมายเพื่อแยกวิเคราะห์เนื้อหาของไฟล์ข้อมูล publicsuffix ได้อย่างง่ายดาย:


2
แต่จำไว้ว่าไม่ใช่แค่เรื่องของการแยกวิเคราะห์! รายการที่ Publicsuffix.org นี้เป็นโครงการที่ไม่เป็นทางการซึ่งยังไม่สมบูรณ์ (เช่น eu.org ขาดหายไปเป็นต้น) ไม่ได้แสดงถึงนโยบายของ TLD โดยอัตโนมัติและอาจไม่ได้รับการดูแลเมื่อใดก็ได้
bortzmeyer

นอกจากนี้ Ruby: github.com/weppos/public_suffix_service
เผือก

7
รายการใน publicsuffix.org ไม่ใช่ "ไม่เป็นทางการ" แต่อย่างใดที่ Mozilla ทำ เนื่องจาก Mozilla, Opera และ Chrome ใช้งานจึงไม่น่าจะไม่มีใครได้รับ สำหรับความไม่สมบูรณ์ผู้ให้บริการโดเมนใด ๆ เช่น eu.org สามารถยื่นขอการรวมได้หากต้องการและพวกเขาเข้าใจผลของการดำเนินการดังกล่าว หากคุณต้องการเพิ่มโดเมนให้ขอให้เจ้าของสมัคร ใช่มันไม่ได้สะท้อนถึงนโยบาย TLD โดยอัตโนมัติ แต่ก็ไม่มีอะไรเกิดขึ้น - ไม่มีแหล่งที่มาของข้อมูลแบบเป็นโปรแกรม
Gervase Markham

กริช / android: okhttp จะให้คุณ topPrivateDomain
bladerunner

9

ดังที่ได้กล่าวไปแล้วโดย Adam และ John publicsuffix.orgเป็นวิธีที่ถูกต้อง แต่ถ้าด้วยเหตุผลใดก็ตามที่คุณไม่สามารถใช้แนวทางนี้นี่คือฮิวริสติกตามสมมติฐานที่ใช้ได้กับ 99% ของโดเมนทั้งหมด:

มีคุณสมบัติอย่างหนึ่งที่แยกความแตกต่าง (ไม่ใช่ทั้งหมด แต่เกือบทั้งหมด) โดเมน "จริง" จากโดเมนย่อยและ TLD และนั่นคือระเบียน MX ของ DNS คุณสามารถสร้างอัลกอริทึมที่ค้นหาสิ่งนี้: ลบส่วนต่างๆของชื่อโฮสต์ทีละรายการและค้นหา DNS จนกว่าคุณจะพบระเบียน MX ตัวอย่าง:

super.duper.domain.co.uk => no MX record, proceed
duper.domain.co.uk       => no MX record, proceed
domain.co.uk             => MX record found! assume that's the domain

นี่คือตัวอย่างใน php:

function getDomainWithMX($url) {
    //parse hostname from URL 
    //http://www.example.co.uk/index.php => www.example.co.uk
    $urlParts = parse_url($url);
    if ($urlParts === false || empty($urlParts["host"])) 
        throw new InvalidArgumentException("Malformed URL");

    //find first partial name with MX record
    $hostnameParts = explode(".", $urlParts["host"]);
    do {
        $hostname = implode(".", $hostnameParts);
        if (checkdnsrr($hostname, "MX")) return $hostname;
    } while (array_shift($hostnameParts) !== null);

    throw new DomainException("No MX record found");
}

นั่นคือสิ่งที่ IETF แนะนำที่นี่หรือไม่?
Ellie Kesselman

1
แม้แต่publicsuffix.org ก็บอก (ดูย่อหน้าที่หก) ว่าวิธีที่เหมาะสมในการดำเนินการนี้คือผ่าน DNS เช่นเดียวกับที่คุณพูดในคำตอบของคุณ!
Ellie Kesselman

1
ยกเว้นว่าคุณสามารถมีโดเมนโดยไม่มีระเบียน MX ได้ และอัลกอริทึมนั้นจะถูกหลอกโดยระเบียนตัวแทน และฝั่งตรงข้ามคุณมี TLD ที่มีระเบียน MX (เช่น.aiหรือ.axเพื่อตั้งชื่อเพียงไม่กี่ชื่อ)
Patrick Mevzek

@patrick: ฉันเห็นด้วยอย่างยิ่ง; อย่างที่ฉันได้กล่าวไว้ในบทนำอัลกอริทึมนี้ไม่ได้ใช้กันกระสุนมันเป็นเพียงการฮิวริสติกที่ทำงานได้ดีอย่างน่าประหลาดใจ
Francois Bourgeois

2

ดังที่ได้กล่าวไปแล้วรายการคำต่อท้ายสาธารณะเป็นเพียงวิธีเดียวในการแยกวิเคราะห์โดเมนอย่างถูกต้อง สำหรับ PHP คุณสามารถลองTLDExtract นี่คือโค้ดตัวอย่าง:

$extract = new LayerShifter\TLDExtract\Extract();

$result = $extract->parse('super.duper.domain.co.uk');
$result->getSubdomain(); // will return (string) 'super.duper'
$result->getSubdomains(); // will return (array) ['super', 'duper']
$result->getHostname(); // will return (string) 'domain'
$result->getSuffix(); // will return (string) 'co.uk'

1

เพิ่งเขียนโปรแกรมสำหรับสิ่งนี้ใน clojure โดยอาศัยข้อมูลจาก publicsuffix.org:

https://github.com/isaksky/url_dom

ตัวอย่างเช่น:

(parse "sub1.sub2.domain.co.uk") 
;=> {:public-suffix "co.uk", :domain "domain.co.uk", :rule-used "*.uk"}

1

สำหรับไลบรารี C (ด้วยการสร้างตารางข้อมูลใน Python) ฉันเขียนhttp://code.google.com/p/domain-registry-provider/ซึ่งทั้งรวดเร็วและประหยัดพื้นที่

ไลบรารีใช้ ~ 30kB สำหรับตารางข้อมูลและ ~ 10kB สำหรับรหัส C ไม่มีค่าใช้จ่ายในการเริ่มต้นระบบเนื่องจากตารางถูกสร้างขึ้นในเวลาคอมไพล์ ดูhttp://code.google.com/p/domain-registry-provider/wiki/DesignDocสำหรับรายละเอียดเพิ่มเติม

เพื่อให้เข้าใจโค้ดการสร้างตาราง (Python) ได้ดีขึ้นให้เริ่มที่นี่: http://code.google.com/p/domain-registry-provider/source/browse/trunk/src/registry_tables_generator/registry_tables_generator.py

หากต้องการทำความเข้าใจ C API ให้ดีขึ้นโปรดดู: http://code.google.com/p/domain-registry-provider/source/browse/trunk/src/domain_registry/domain_registry.h


1
ฉันยังมีไลบรารี C / C ++ ที่มีรายการของตัวเองแม้ว่าจะถูกตรวจสอบกับรายการ publicsuffix.org เช่นกัน เรียกว่า libtld และทำงานภายใต้ Unix และ MS-Windows snapwebsites.org/project/libtld
Alexis Wilke

0

มันไม่ได้ผลอย่างแน่นอน แต่คุณอาจได้รับคำตอบที่เป็นประโยชน์โดยพยายามดึงโดเมนทีละชิ้นและตรวจสอบการตอบสนองเช่นดึง ' http: // uk ' จากนั้น ' http://co.uk ' แล้ว " http://domain.co.uk " เมื่อคุณได้รับการตอบสนองที่ไม่มีข้อผิดพลาดแสดงว่าคุณมีโดเมนและส่วนที่เหลือเป็นโดเมนย่อย

บางครั้งคุณก็ต้องลอง :)

แก้ไข:

Tom Leys ชี้ให้เห็นในความคิดเห็นว่าบางโดเมนได้รับการตั้งค่าเฉพาะในโดเมนย่อย www ซึ่งจะทำให้เราได้คำตอบที่ไม่ถูกต้องในการทดสอบข้างต้น จุดดี! บางทีวิธีที่ดีที่สุดคือตรวจสอบแต่ละส่วนด้วย " http: // www " และ "http: //" และนับการเข้าชมเป็น Hit สำหรับส่วนนั้นของชื่อโดเมนหรือไม่ เรายังขาดการจัดการ 'ทางเลือก' บางอย่างเช่น 'web.domain.com' แต่ฉันไม่ได้พบกับหนึ่งในนั้นมาสักพักแล้ว :)


ไม่มีการรับประกันว่า x.com ชี้ไปยังเว็บเซิร์ฟเวอร์ที่พอร์ต 80 แม้ว่า www.x.com จะทำก็ตาม www เป็นโดเมนย่อยที่ถูกต้องในกรณีนี้ บางที whois อัตโนมัติจะช่วยตรงนี้
Tom Leys

จุดดี! whois จะล้างมันแม้ว่าจะยังคงรักษารายชื่อเซิร์ฟเวอร์ whois ที่จะใช้ซึ่งระดับ tld / 2nd จะหมายถึงการแก้ปัญหาเดียวกันสำหรับ edge case
jTresidder

คุณสมมติว่ามีเซิร์ฟเวอร์ HTTP ในทุกโดเมน
Francois Bourgeois

จะไม่ทำงานสำหรับ.DKและอื่น ๆ บางอย่างตามที่http://dk/เป็นอยู่ การวิเคราะห์พฤติกรรมแบบนี้ไม่ใช่วิธีที่จะไป ...
Patrick Mevzek

0

ใช้ URIBuilder แล้วรับแอตทริบิวต์ URIBUilder.host แยกออกเป็นอาร์เรย์บน "." ตอนนี้คุณมีอาร์เรย์ที่แยกโดเมนออก


0
echo tld('http://www.example.co.uk/test?123'); // co.uk

/**
 * http://publicsuffix.org/
 * http://www.alandix.com/blog/code/public-suffix/
 * http://tobyinkster.co.uk/blog/2007/07/19/php-domain-class/
 */
function tld($url_or_domain = null)
{
    $domain = $url_or_domain ?: $_SERVER['HTTP_HOST'];
    preg_match('/^[a-z]+:\/\//i', $domain) and 
        $domain = parse_url($domain, PHP_URL_HOST);
    $domain = mb_strtolower($domain, 'UTF-8');
    if (strpos($domain, '.') === false) return null;

    $url = 'http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1';

    if (($rules = file($url)) !== false)
    {
        $rules = array_filter(array_map('trim', $rules));
        array_walk($rules, function($v, $k) use(&$rules) { 
            if (strpos($v, '//') !== false) unset($rules[$k]);
        });

        $segments = '';
        foreach (array_reverse(explode('.', $domain)) as $s)
        {
            $wildcard = rtrim('*.'.$segments, '.');
            $segments = rtrim($s.'.'.$segments, '.');

            if (in_array('!'.$segments, $rules))
            {
                $tld = substr($wildcard, 2);
                break;
            }
            elseif (in_array($wildcard, $rules) or 
                    in_array($segments, $rules))
            {
                $tld = $segments;
            }
        }

        if (isset($tld)) return $tld;
    }

    return false;
}


0

คุณสามารถใช้ lib tld.js: JavaScript API เพื่อทำงานกับชื่อโดเมนที่ซับซ้อนโดเมนย่อยและ URI

tldjs.getDomain('mail.google.co.uk');
// -> 'google.co.uk'

หากคุณได้รับโดเมนรากในเบราว์เซอร์ คุณสามารถใช้ lib AngusFu / browser-root-domainนี้

var KEY = '__rT_dM__' + (+new Date());
var R = new RegExp('(^|;)\\s*' + KEY + '=1');
var Y1970 = (new Date(0)).toUTCString();

module.exports = function getRootDomain() {
  var domain = document.domain || location.hostname;
  var list = domain.split('.');
  var len = list.length;
  var temp = '';
  var temp2 = '';

  while (len--) {
    temp = list.slice(len).join('.');
    temp2 = KEY + '=1;domain=.' + temp;

    // try to set cookie
    document.cookie = temp2;

    if (R.test(document.cookie)) {
      // clear
      document.cookie = temp2 + ';expires=' + Y1970;
      return temp;
    }
  }
};

การใช้คุกกี้เป็นเรื่องยุ่งยาก


0

หากคุณต้องการแยกโดเมนย่อยและ / หรือโดเมนออกจากรายการ URL ตามอำเภอใจสคริปต์ python นี้อาจเป็นประโยชน์ ระวังให้ดีแม้ว่ามันจะไม่สมบูรณ์แบบ นี่เป็นปัญหาที่ยุ่งยากในการแก้ไขโดยทั่วไปและจะมีประโยชน์มากหากคุณมีโดเมนที่อนุญาตพิเศษที่คุณต้องการ

  1. รับโดเมนระดับบนสุดจาก publicsuffix.org
คำขอนำเข้า

url = 'https://publicsuffix.org/list/public_suffix_list.dat'
เพจ = request.get (url)

โดเมน = []
สำหรับบรรทัดใน page.text.splitlines ():
    ถ้า line.startswith ('//'):
        ดำเนินการต่อ
    อื่น:
        โดเมน = line.strip ()
        ถ้าโดเมน:
            domains.append (โดเมน)

โดเมน = [d [2:] ถ้า d.startswith ('*.') else d สำหรับ d ในโดเมน]
พิมพ์ ('found {} domains'.format (len (domains)))
  1. สร้าง regex
นำเข้าใหม่

_regex = ''
สำหรับโดเมนในโดเมน:
    _regex + = r '{} |' .format (domain.replace ('.', '\.'))

subdomain_regex = r '/([^/]*)\. [^/.]+\.({})/.*$' รูปแบบ (_regex)
domain_regex = r '([^ /.] + \. ({})) /.*$' รูปแบบ (_regex)
  1. ใช้ regex ในรายการ URL
FILE_NAME = '' # ใส่ชื่อไฟล์ CSV ที่นี่
URL_COLNAME = '' # ใส่ชื่อคอลัมน์ URL ที่นี่

นำเข้าแพนด้าเป็น pd

df = pd.read_csv (FILE_NAME)
urls = df [URL_COLNAME] .astype (str) + '/' # หมายเหตุ: การเพิ่ม / เป็นการแฮ็กเพื่อช่วย regex

df ['sub_domain_extracted'] = urls.str.extract (pat = subdomain_regex, expand = True) [0]
df ['domain_extracted'] = urls.str.extract (pat = domain_regex, expand = True) [0]

df.to_csv ('extract_domains.csv', index = False)

-1

รายการคำต่อท้ายทั่วไป (.co.uk, .com, และอื่น ๆ ) เพื่อตัดออกพร้อมกับ http: // จากนั้นคุณจะมีเพียง "sub.domain" ที่จะใช้แทน " http: // sub domain.suffix "หรืออย่างน้อยนั่นคือสิ่งที่ฉันอาจทำ

ปัญหาใหญ่ที่สุดคือรายการคำต่อท้ายที่เป็นไปได้ มีจำนวนมากหลังจากทั้งหมด


-3

จากการดูรายการ publicsuffix.org อย่างรวดเร็วพบว่าคุณสามารถประมาณได้อย่างสมเหตุสมผลโดยการลบสามส่วนสุดท้าย ("ส่วน" ในที่นี้หมายถึงส่วนระหว่างจุดสองจุด) จากโดเมนที่ส่วนสุดท้ายมีความยาวสองอักขระ โดยสมมติว่าเป็นรหัสประเทศและจะแบ่งย่อยออกไปอีก หากกลุ่มสุดท้ายคือ "เรา" และส่วนที่สองถึงสุดท้ายเป็นอักขระสองตัวด้วยให้ลบสี่ส่วนสุดท้ายออก ในกรณีอื่น ๆ ทั้งหมดให้ลบสองส่วนสุดท้ายออก เช่น:

"example" ไม่ใช่อักขระสองตัวดังนั้นให้ลบ "domain.example" ออกจาก "www"

"example" ไม่ใช่อักขระสองตัวดังนั้นให้ลบ "domain.example" ออกจาก "super.duper"

"uk" เป็นอักขระ 2 ตัว (แต่ไม่ใช่ "us") ดังนั้นให้ลบ "domain.co.uk" ออกจาก "super.duper"

"us" เป็นอักขระสองตัวและเป็น "เรา" และ "wy" เป็นอักขระสองตัวด้วยดังนั้นให้ลบ "pvt.k12.wy.us" ออกจาก "foo"

โปรดทราบว่าแม้ว่าจะใช้ได้กับทุกตัวอย่างที่ฉันเห็นในคำตอบจนถึงตอนนี้ แต่ก็ยังคงเป็นเพียงการประมาณที่สมเหตุสมผล มันไม่ถูกต้องทั้งหมดแม้ว่าฉันจะสงสัยว่ามันใกล้เคียงที่สุดเท่าที่คุณจะได้รับโดยไม่ต้องสร้าง / รับรายการจริงเพื่อใช้อ้างอิง


3
มีกรณีล้มเหลวมากมาย นี่คือประเภทของอัลกอริทึมเบราว์เซอร์ที่ใช้ในการลองใช้ อย่าทำอย่างนั้นใช้ PSL - มันได้ผลและมีไลบรารีที่จะช่วยคุณ
Gervase Markham

ไม่มีสิ่งใดห้ามไม่ให้ gTLD "แบ่งกลุ่ม" เช่นกันกรณีนี้ในตอนต้น.NAMEตัวอย่างเช่นเมื่อคุณซื้อได้เฉพาะfirstname.lastname.nameชื่อโดเมน และในทางตรงกันข้ามตอนนี้.USก็แบนเช่นกันดังนั้นคุณสามารถx.y.z.whatever.usซื้อได้whatever.usที่รีจิสตรีจากนั้นอัลกอริทึมของคุณจะล้มเหลว
Patrick Mevzek

1
นอกจากนี้เกี่ยวกับ("segment" ในที่นี้หมายถึงส่วนที่อยู่ระหว่างจุดสองจุด) : สิ่งนี้เรียกว่าป้ายกำกับในโลก DNS ไม่จำเป็นต้องตั้งชื่อใหม่
Patrick Mevzek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.