將所有子域重定向到子文件夾
我想添加一條規則,以便將所有子域重定向到子文件夾。例如:
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 的提供,大多數優秀的主機也會幫助您。有兩個階段:
- 為
*.example.com
- 主機的 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 記憶體需要更新,並且某些訪問者在他們更新之前無法立即使用子域。至少根據我上面的建議,他們可以立即開始。