2015-12-14 49 views
0

我確定這是一件愚蠢的事情,而且我剛剛看了太久。單個目錄的SSL自動檢測(使用X-Forwarded-Proto)不起作用

我運行的Apache 2.4.10

我希望有一個單一的目錄強制用戶到HTTPS。在該目錄之外,我希望用戶能夠跳回到標準HTTP(除非他們正在加載HTTPS頁面的支持文件,例如圖像,css)

這是負載平衡器的後面,負載平衡器正在處理HTTPS,因此我依賴於X-Forwarded-Proto頭,因爲所有請求都以相同的協議和端口進入節點。我已經進行了雙重檢查,並且頭文件由LB爲HTTP和HTTPS事務填充。

這是我在我的配置:

RewriteCond %{HTTP:X-Forwarded-Proto} http [NC] 
RewriteCond %{REQUEST_URI} ^/secureDir/(.*) [NC] 
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 
RewriteCond %{HTTP:X-Forwarded-Proto} https [NC] 
RewriteCond %{REQUEST_URI} !^/secureDir/(.*) [NC] 
RewriteCond %{REQUEST_URI} !^.*\.(gif|jpg|png|swf|css|js) [NC] 
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 

這是我想要什麼,我認爲應該發生。 如果請求通過HTTP傳入並且請求是針對「/ secureDir /」中的資源的 - 請求將會被反彈到HTTPS(在相同的REQUEST_URI處)。 如果請求通過HTTPS傳入,並且請求不在「/ secureDir /」內,它將被反彈到HTTP(除非它只是對gif | jpg | etc的請求)。

這應該無縫地在HTTPS和HTTP之間來回移動,如果他們進出secureDir目錄的話......但事實並非如此。

如果我點擊secureDir目錄,它不會自動將我置入HTTPS。如果我手動請求HTTPS,它將通過請求。如果我移出secureDir目錄,它會自動讓我回到HTTP。所以,似乎第二套重寫條件正在迎頭趕上,但不是第一套。

我也試着交替的條件來尋找反(HTTP,HTTPS - !但是我似乎仍然只得到一個陷阱)

任何有識之士來我俯瞰什麼?

回答

0

發現錯誤。幾行之前沒有終止重寫,所以它將這些條件附加到這組中的第一組條件。

對於其他人可能會嘗試做類似的事情 - 我改變的唯一的其他事情是將X-Forwarded-Proto的「http」匹配更改爲「^ http $」,以確保它不是貪婪(因爲我有一些'無限重定向'的條件,如果我沒有)