
這是我的場景:
我有 1 個靜態 IP 和 2 個伺服器。一台伺服器是 Web 伺服器,另一台是郵件伺服器。我有一個路由器作為硬體防火牆,所有連接埠都設定為需要直通內部 IP 位址。
如果用戶輸入 urlhttp://www.domain.com他們看到該網站。如果使用者想要存取網路郵件,則輸入 urlhttp://mail.domain.com但仍然看到http://www.domain.com
我已將 Webmail 網域設定為可透過郵件伺服器上的連接埠 8080 訪問,並且如果使用者鍵入 urlhttp://mail.domain.com:8080它工作沒問題,但不適合http://mail.domain.com。
所以這是我的問題:
在我的 httpd.conf 中,我想設定一個重定向 301,以便當使用者輸入時http://mail.domain.com他們被重定向到http://mail.domain.com:8080
我不想使用 .htaccess 並將指令保留在 httpd.conf 中
謝謝...
答案1
您需要在主 Web 伺服器上建立一個虛擬主機,以回應對「mail.domain.com」位址的 Web 請求。看看基於名稱的虛擬主機Apache 網站上的文件。您還需要 mod_rewrite 規則來執行重新導向。你的配置看起來像這樣:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName mail.domain.com
RewriteEngine On
RewriteRule (.*) http://mail.domain.com:8080/\1 [R=301,L]
</VirtualHost>
答案2
至少有兩種方法可以做到這一點:
創建2個虛擬主機一個用於 www.domain.com,另一個用於 mail.domain.com,然後將 RedirectMatch 指令放入第二個指令中。
您也可以使用代理通行證mail.domain.com 虛擬主機中的指令,使其像反向代理一樣工作,並使 mail.domaine.com:80 直接工作而無需重定向像這樣使用 mod_rewrite 僅重定向具有類似規則的 mail.domain.com url
RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
RewriteRule ^(.*)http://mail.domain.com:8080/1 美元 [R=301]使用mod_rewrite,您也可以使用類似規則進行反向代理(mail.domain.com 應解析為內部IP)
RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
RewriteRule ^(.*)http://mail.domain.com:8080/1 美元 [P]