前段時(shí)間看到有人給簡書提供的建議里有一條是希望簡書能夠提供用戶自定義子域名功能。作為一個(gè)攻城獅,自然就開始想到自己能夠怎么實(shí)現(xiàn)這個(gè)功能。但是沒有什么特別好的思路憔晒。
今天突然靈光一現(xiàn),腦子里出現(xiàn)了“泛域名解析”這個(gè)詞蔑舞。于是馬上聯(lián)想到了這個(gè)功能拒担。再加上之前錄制《Laravel 入門之路由》這門課程的時(shí)候,提到過的子域名路由這個(gè)功能斗幼,馬上就想到了針對(duì)用戶自定義域名的解決方案澎蛛。
首先呢,稍微解釋一下泛域名解析蜕窿,泛域名解析就是在添加域名的解析記錄的時(shí)候谋逻,添加一條帶通配符*
的記錄呆馁,這樣就能夠匹配到其他的所有域名。
比如毁兆,下圖是DNSPod的域名解析服務(wù)浙滤,可以看到,它提示我如果使用*
的話气堕,就可以匹配其他所有域名纺腊。
所以,我們就添加這樣的一條記錄茎芭。
這里因?yàn)槲以趦?nèi)網(wǎng)調(diào)試揖膜,所以就直接把記錄的內(nèi)容填成了我的內(nèi)網(wǎng)地址。大家在使用的時(shí)候記得填寫服務(wù)器地址就行梅桩。
等待一會(huì)兒之后壹粟,添加的記錄就生效了。這時(shí)候宿百,我只要隨便輸入一個(gè)之前不存在的子域名趁仙,都會(huì)指向192.168.1.101。比如:
現(xiàn)在垦页,我們只需要進(jìn)入到Laravel當(dāng)中去雀费,修改一下路由。
上圖里痊焊,我給這個(gè)組添加了一個(gè)domain的限制盏袄,并且在它對(duì)應(yīng)的值里添加了一個(gè)user的參數(shù),也就是說它會(huì)將子域名部分當(dāng)做參數(shù)宋光,傳遞給組內(nèi)的所有請(qǐng)求處理函數(shù)貌矿。
然后炭菌,在里面的這個(gè)請(qǐng)求處理函數(shù)里罪佳,我只是簡單的顯示了一下這個(gè)子域名。對(duì)于大家來說黑低,可以通過這個(gè)參數(shù)赘艳,找到對(duì)應(yīng)的用戶,顯示用戶的個(gè)人主頁克握,這樣就是可以實(shí)現(xiàn)通過子域名訪問用戶的主頁啦蕾管!
當(dāng)然,在這之前還要進(jìn)行子域名和用戶之間的綁定菩暗,不過這個(gè)就非常簡單了掰曾,在數(shù)據(jù)庫里添加一條記錄就可以了。
這樣停团,通過泛域名解析和Laravel提供的的路由功能旷坦,就能非常簡單的實(shí)現(xiàn)用戶的自定義域名啦掏熬。
PS:我這里只是進(jìn)行了原理性的演示,實(shí)際使用過程中還需要對(duì)服務(wù)器軟件(Apache秒梅、Nginx等)進(jìn)行配置旗芬,讓它們能夠支持通過不同的域名來訪問。
感謝您的閱讀捆蜀!
本賬號(hào)已經(jīng)不再更新疮丛,更多文章請(qǐng)移步我的個(gè)人博客https://www.zacharyjia.me