我擁有該網域example.com
,並設定了 Ubuntu Apache 伺服器,將任何子網域指向具有相同名稱的目錄。
<VirtualHost *:80>
ServerAlias *.example.com
VirtualDocumentRoot /var/www/html/%1
</VirtualHost>
所以subdomain.example.com
會指向example.com/subdomain
.
我試圖允許用戶將他們自己的自訂網域指向他們選擇的子網域,我如何實現這一點以及需要哪些記錄以及必須對虛擬主機?
我嘗試過以下記錄:
sampledomain.example
(別名記錄記錄)--@
>sample.example.com
sampledomain.example
(A記錄) -@
--> (IP
example.com 的地址)
我還嘗試使用www
CNAME 並刪除A record
.
sample.example.com
成功指向example.com/sample
.但是,sampledomain.example
由於某種原因,其行為類似於根站點。
因此,如果我訪問sampledomain.example/sample
,我將獲得 的內容example.com/sample
而不是指向sample.example.com
。
我該如何解決這個問題?需要哪些記錄以及可以對虛擬主機執行哪些操作?
我使用了 CNAME 記錄,以便當使用者存取該記錄時,我可以透過 PHP 檢索自訂網域 - 是否需要 CNAME?
答案1
如果您願意根據客戶的要求手動執行此操作,那麼這很容易。您所要做的就是新增ServerAlias sampledomain.com
至虛擬主機配置並重新載入 Web 伺服器配置。
但是,如果您想讓客戶在某種客戶控制介面中自行執行此操作,由於 Web 伺服器上的虛擬主機的工作方式,這並不容易實現。原因如下:
如果您有任何 DNS 記錄(無論是否A
或CNAME
)對應sampledomain.com
到您的 Web 伺服器,瀏覽器將向您的伺服器 IP 位址傳送請求,並將 HTTPHost
標頭設定為sampledomain.com
。 Web 伺服器將使用此標頭來決定哪個虛擬主機應該處理此問題,如果sampledomain.com
既不是虛擬主機名稱也不是別名,則請求將由預設虛擬主機回應,就像您所經歷的那樣。
為了實現這一點,您需要一種方法讓您的客戶為其虛擬主機配置別名。對於 Apache,這並不容易,但理論上您可以從資料庫中讀取此內容,如所解釋的這裡(我從未嘗試過這個,所以我不知道這是否有效)。
另外,諸如此類的事情虛擬最小在這種情況下可能會有所幫助。