2011-07-07 50 views
1

用mod_rewrite努力嘗試將非安全頁面重定向到安全頁面。這工作:mod_rewrite安全重定向

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} (help/returns) 
RewriteRule .? https://mysite.localhost/%1/ [R=301,L] 

但這並不:

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{HTTP:Host} (mysite.localhost|mylivesite.com) 
RewriteCond %{REQUEST_URI} (help/returns) 
RewriteRule .? https://%1/%2/ [R=301,L] 

它試圖給我的是https://help/returns//

我似乎無法得到HTTP的網址:主機進入決賽RewriteRule線。

我需要在那裏的主機,所以我可以使用相同的文件進行本地開發和實時部署。

非常感謝任何輸入。

回答

0

您可以使用此規則:

RewriteCond %{HTTPS} =off 
RewriteRule ^help/returns https://%{HTTP_HOST}%{REQUEST_URI} [QSA,R=301,L] 
  1. 此規則將要http://example.com/help/returns所有請求重定向到安全(HTTPS)位置:https://example.com/help/returns - 它將保留完整的URL路徑+查詢字符串。你有太多的條件,規則變得複雜,當你的服務器真的很忙時(正則表達式很貴),這不是一件好事。

  2. 我已經用更合適的%{HTTPS} =off替換了%{SERVER_PORT} 80(如果您的站點在非默認端口上運行,這非常有用,它是80)。

  3. 我也刪除了HTTP_HOST匹配部分 - 除非您有多個域名/子域綁定到同一個站點,否則您並不需要它。如果您需要這種條件,只需在第一行後添加此行:RewriteCond %{HTTP_HOST} ^(mysite.localhost|mylivesite.com)

+0

非常感謝LazyOne。我沒有意識到可以將HTTP_HOST放在最終的「目標」 (我使用的是PORT 80而不是HTTPS = off,因爲我有一個SSL卸載負載均衡器,它不使用443作爲安全頁面 - 它使用8080) – Geoff

+0

@Geoff在將我的答案標記爲已接受之前,請確保規則正常工作(我確定我的規則沒問題 - 我測試過了,但是您的設置可能稍有不同,可能需要調整了一下,但極不可能)。 – LazyOne