前段時(shí)間看到有人給簡(jiǎn)書提供的建議里有一條是希望簡(jiǎn)書能夠提供用戶自定義子域名功能。作為一個(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ù)里,我只是簡(jiǎn)單的顯示了一下這個(gè)子域名。對(duì)于大家來說,可以通過這個(gè)參數(shù),找到對(duì)應(yīng)的用戶,顯示用戶的個(gè)人主頁(yè),這樣就是可以實(shí)現(xiàn)通過子域名訪問用戶的主頁(yè)啦!

當(dāng)然,在這之前還要進(jìn)行子域名和用戶之間的綁定,不過這個(gè)就非常簡(jiǎn)單了,在數(shù)據(jù)庫(kù)里添加一條記錄就可以了。
這樣,通過泛域名解析和Laravel提供的的路由功能,就能非常簡(jiǎn)單的實(shí)現(xiàn)用戶的自定義域名啦。
PS:我這里只是進(jìn)行了原理性的演示,實(shí)際使用過程中還需要對(duì)服務(wù)器軟件(Apache、Nginx等)進(jìn)行配置,讓它們能夠支持通過不同的域名來訪問。
感謝您的閱讀!
本賬號(hào)已經(jīng)不再更新,更多文章請(qǐng)移步我的個(gè)人博客https://www.zacharyjia.me