Domain-Name-System

將所有子域重定向到子文件夾

  • July 7, 2012

我想添加一條規則,以便將所有子域重定向到子文件夾。例如:

app1.example.com -> example.com/app1
app2.example.com -> example.com/app2
something.example.com -> example.com/something

所有子域將只有一層深。

問題

  • 哪些 DNS 提供商允許我這樣做?

  • 這些替代方案是否可行?

    • 將它們全部重定向到具有靜態 IP 的特殊 webapp,該靜態 IP 重定向到正確的子文件夾。我怎麼知道他們來自哪個子域?
    • 在我需要時以程式方式創建每個規則。哪些 DNS 提供商具有添加規則的 API 訪問權限?我認為 Amazon Route 53 可能是這裡的答案。

哪些 DNS 提供商允許我這樣做?

都是有能力的。它甚至不需要是特定於 DNS 的提供,大多數優秀的主機也會幫助您。有兩個階段:

  1. *.example.com
  2. 主機的 Web 伺服器(例如 Apache)設置為通過*.example.com將其路由到example.com.VirtualHost

然後,在最後,您添加一個.htaccess條目,該條目使用 aRewriteRule來擷取每個子域,並將其重定向到使用HTTP_HOST變數的文件夾。

未經測試,但類似這樣:

RewriteEngine on
RewriteCond   %{HTTP_HOST}                 ^[^.]+\.example\.com$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^([^.]+)\.example\.com(.*)   http://example.com/$1/$2

假設使用者請求app1.example.com/bob.

2號線

app1.example.com這將擷取HTTP_HOST- 它會匹配RewriteCond.

3號線

通常,Apache 只會/bob通過RewriteRule. 為了使用子域,我們通過強制下一個規則匹配來利用

${HTTP_HOST}$1
|           ^ /bob
^ app1.example.com

4號線

決賽現在正在RewriteRule匹配app1.example.com/bob,而不僅僅是/bob. 因此,它可以有一個“完整的”正則表達式來匹配這個子域和路徑,並執行所需的重定向。

如果你不想要這個功能,你可以簡化規則。


這些替代方案是否可行?將它們全部重定向到具有靜態 IP 的特殊 webapp,該靜態 IP 重定向到正確的子文件夾。我怎麼知道他們來自哪個子域?

沒有萬無一失的方法可以做到這一點。您可以嘗試 HTTP Referer,但並非總是由所有瀏覽器發送,某些防火牆會刪除標頭等。

在我需要時以程式方式創建每個規則。哪些 DNS 提供商具有添加規則的 API 訪問權限?我認為 Amazon Route 53 可能是這裡的答案。

這實際上會導致對上述問題的更複雜的解決方案,所以我不推薦它。它還會造成延遲:DNS 記憶體需要更新,並且某些訪問者在他們更新之前無法立即使用子域。至少根據我上面的建議,他們可以立即開始。

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