我遇到了麻煩,使用mod_rewrite並需要幫助。使用Apache 2.2 mod_rewrite來合併子域
我有在DMZ的反向代理,其接受來自外部客戶端請求的子域sub1.example.com
和sub2.example.com
請求和公司內部網絡,內internal.example.com
它們轉發(透明),以一個單一的機器。具體做法是:
- →
http://internal.example.com
https://sub1.example.com
→https://internal.example.com
http://sub2.example.com
→http://internal.example.com
https://sub2.example.com
→https://internal.example.com
雖然我無法控制執行重定向的DMZ中的代理服務器,但我確實完全控制了internal.example.com
,它承載了Apache 2.2並偵聽了80
和443
並加載了mod_rewrite
。
我需要配置此Apache實例至(上HTTP或HTTPS sub1
或sub2
)執行的任何四個以上的子域的地址的重定向到第四地址https://sub2.example.com
(4)。要做到這一點,我目前使用的httpd.conf
如下:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://sub2.example.com/$1 [R=301,L]
這個作品在重定向該請求客戶端地址(1)和(3)(即,子域的HTTP地址),以正確的目標(4 ),但是在重寫對地址(2)的訪問中沒有效果。重定向(2) - (4),我已經添加了以下到VirtualHost
要素配置SSL環境:
RewriteEngine On
RewriteCond %{SERVER_NAME} =sub1.example.com
RewriteRule ^/?(.*) https://sub2.example.com/$1 [R=301,L]
如果客戶要求通過HTTPS sub1.example.com
(通過mod_rewrite的記錄確認)現在這是觸發。然而,雖然從機測試後面所述DMZ(內部和在同一網絡internal.example.com
上)時重定向現在正常工作,它們不能將其外部的任何網絡,上工作,其中:
- 的HTTP子域(1和3)的地址無法完全加載
- 子域(2和4)的HTTPS地址在客戶端瀏覽器中產生錯誤,該錯誤報告執行了太多重定向。
任何人都可以提出我哪裏出了錯,或者可能是我的情況更合適的配置?提前致謝!
我不知道我關注你 - 正如我在文章開頭所描述的那樣,DMZ中的反向代理被配置爲識別並轉發來自客戶端的請求,要求子域名爲'sub2'的內部計算機('internal.example.com')。我懷疑問題是重寫規則本身,它們以某種方式導致重定向循環,但我不確定。 – antonsyd 2011-04-28 00:18:05