簡體   English   中英

Apache有條件地將一頁重定向到HTTP或HTTPS

[英]Apache redirect one page to HTTP or HTTPS conditionally

我們網站的主頁同時作為登錄頁面和主頁,用戶可以在其中單擊指向內容的鏈接。 我試圖做到這一點,以便當主頁充當登錄頁面時,它使用HTTPS並在所有其他情況下使用HTTP。 當前沒有用戶登錄時,主頁充當登錄頁面(我可以為此檢查Cookie):

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_COOKIE} ^((?!MY_LOGIN_COOKIE_NAME).)*$ # Cookie is not present
RewriteRule ^/?$ https://%{SERVER_NAME} [R,L] # Redirect http://example.com to https://example.com

正如預期的那樣,這會將匿名用戶帶到SSL主頁。

問題是當cookie存在時,對主頁的請求如何始終重定向到HTTP版本而不是HTTPS版本? (用戶登錄后,他們將回到首頁,但現在它將顯示內容)。

我嘗試將其附加到上述規則的末尾:

RewriteCond %{HTTP_COOKIE} ^.*MY_LOGIN_COOKIE_NAME=([^;]+) # Cookie exists
RewriteRule ^/?$ http://%{SERVER_NAME} [R,L] # Redirect home page to HTTP only

這會導致重定向循環錯誤,最有可能是因為正則表達式與主頁匹配,重定向到http版本,再次匹配,重定向到http版本。 無限地。

有沒有一種方法可以使Cookie在缺少Cookie時重定向到HTTPS,並在存在cookie時重定向到HTTP?

可以嘗試以下2條規則:

RewriteEngine On

RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP_COOKIE} !MY_LOGIN_COOKIE_NAME [NC]
RewriteRule ^/?$ https://%{SERVER_NAME} [R,L]

RewriteCond %{SERVER_PORT} =443
RewriteCond %{HTTP_COOKIE} MY_LOGIN_COOKIE_NAME [NC]
RewriteRule ^/?$ http://%{SERVER_NAME} [R,L]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM