2011-12-07 425 views
0

我想爲我的apache服務器寫一個mod_rewrite規則。我的要求是,我在服務器上有三個Web應用程序,其中對HTTP方案的所有請求都應該重定向到HTTPS。Apache mod重寫規則問題

這裏是我寫:

RewriteEngine On 

RewriteCond $1 ^abc$ [NC] 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R] 

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R] 

這並不似乎是工作的罰款。我試圖運行abc上下文根在HTTP上運行的應用程序,並將所有其他請求重定向到HTTPS URL。

誰能告訴我我做錯了什麼。

回答

1

我看到一對夫婦的問題,你的第一條規則:

  1. 規則可能不匹配,因爲REQUEST_URI是/abc,而不是abc
  2. 如果規則匹配,則會出現無限重定向循環,導致客戶端發生500內部服務器錯誤,並且日誌中出現「超出重定向限制」錯誤。問題是規則目標與原始請求相同,因此它將進入重定向循環。

我建議擺脫的第一個規則,並添加/ ABC排除第二個規則:

RewriteEngine On 

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !^/abc$ [NC] 
RewriteRule $ https://%{HTTP_HOST}%{REQUEST_URI} [L,R] 

如果您也想強制/ ABC是對HTTP,而不是HTTPS,那麼你可以添加第二條規則:

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} ^/abc$ [NC] 
RewriteRule $ http://%{HTTP_HOST}%{REQUEST_URI} [L,R] 
+0

非常感謝!這工作。 – Ankit