2011-07-25 48 views
2

我有,我們在相同的EC2實例運行的兩個系統,並使用AWS彈性負載均衡,爲一個系統發送請求到端口81Apache的mod_rewrite的重寫規則在端口錯誤地將AWS

因此,例如一個問題,我們擁有www.example.com和bookings.example.com,其中AWS Elastic Load Balancer發送預訂請求。儘管我們的端口80上的我們的EC2箱,並要求www。得到的81端口

客戶連接到www.example.com上的端口80,但隨後從負載平衡器獲取對服務器上的81端口

當我們例如添加此規則到,雖然發.htaccess的www網站我們遇到了81端口出現的問題。

RewriteRule ^index.html/[R=301,L,QSA] !-s 
#Results in customer being sent to http://www.example.com:81/ 

如何確保端口81不會推回給客戶?

我想出了這樣的選擇:

RewriteRule ^index.html http://%{HTTP_HOST}/ [R=301,L,QSA] !-s 

但在這個例子中HTTP是硬編碼的,我需要做的是變量,以便在需要的時候也可以是HTTPS。我也有更多的只是這個index.html規則,重定向回到/我有大約30條規則,並認爲應該有一個班輪將此通過端口81修復回客戶。

回答

1

您的替代方案將可用,並且可以擴展爲支持ssl,但可能不需要。在創建自我引用URL時,Apache遵循特定的順序。 UseCanonicalNameUseCanonicalPhysicalPort控制如何創建它們,而不管模塊(mod_rewrite,mod_alias等)如何。

不知道更多的配置,我會建議在適當的VirtualHost中開始這些指令。

UseCanonicalName On 
ServerName www.example.com:80 

編輯:如果您不想因任何理由這樣做,這裏是你如何解決您重寫以支持SSL。

RewriteCond %{HTTPS} =on 
RewriteRule - - [env=req_scheme=http,S=1] 
RewriteRule - - [env=req_scheme=https] 

RewriteRule ^index.html %{ENV:req_scheme}://%{HTTP_HOST}/ [R=301,L,QSA] 
+0

感謝您的建議。我怎麼能做到這一點,但在ServerName行沒有硬編碼的域名。我有大約50多個域名指向負載均衡器和這些Apache服務器。 – hpoom

+0

感謝您的補充評論。我有RewriteRule示例工作,但仍然希望在虛擬主機中解決它,因爲這接近了更清晰的方式來處理這個問題。有什麼辦法可以用Virtual Host示例支持多個域? – hpoom