Apache-2.2

如何創建一個擷取所有 Apache VHOST 條目?

  • November 22, 2014

您好我正在嘗試允許使用者使用 CNAME 將域映射到我們。我們的伺服器執行 CentOS 6.4 和 Apache。當我在另一個域上創建 CNAME 時,我們擁有以下值:

test.otherdomain.com -> app.example.com

該請求載入 www.example.com。這是我的 VHOSTS 中的第一條規則,其順序如下;

:80
ServerName www.example.com
ServerAlias example.com
:443
ServerName www.example.com
ServerAlias example.com

:80
ServerName sub1.example.com
:443
ServerName sub1.example.com

:80
ServerName sub2.example.com
:443
ServerName sub2.example.com

:80
ServerName app.example.com
ServerAlias *.example.com
:443
ServerName app.example.com
ServerAlias *.example.com

*.example.com 允許使用者創建自定義子域,因此他們可以創建除 www、sub1 或 sub2 之外的任何內容。例如:acme.example.com。

經過一些研究,我發現問題是通過的主機與我的任何規則都不匹配,因此正在提供第一個定義的站點?當使用者訪問 test.otherdomain.com 時,如何創建預設或擷取將為 app.example.com 提供服務的所有站點?

使用者在我們的應用程序中以表格形式輸入他們的域,因此我無法將它們全部添加到我的虛擬主機條目中作為別名。如果我將 app.example.com 作為第一條規則(沒有萬用字元別名),然後再次使用萬用字元別名,Apache 似乎更喜歡萬用字元規則,靜態子域 sub1 和 sub2 重定向到 app.example.com。

謝謝!

固定的!

第一條規則必須是預設規則。像這樣改變規則使它起作用:

:80
ServerName app.example.com
:443
ServerName app.example.com

:80
ServerName www.example.com
ServerAlias example.com
:443
ServerName www.example.com
ServerAlias example.com

:80
ServerName sub1.example.com
:443
ServerName sub1.example.com

:80
ServerName sub2.example.com
ServerAlias *.example.com
:443
ServerName sub2.doexampleain.com
ServerAlias *.example.com

這允許 sub1 是靜態的,並且由於 sub2/sub3 僅用於執行緒額外的 AJAX 呼叫,它們是應用程序的迷你版本。通過將該程式碼移動到主應用程序並更改萬用字元,使其不是應用程序規則的一部分,一切正常!

引用自:https://serverfault.com/questions/645097