2011-01-22 54 views
1

我試圖說服國防部,重寫http://example.com重定向到https://example.com而不是重定向http://subdomain.example.com重定向一些但不是所有的域到HTTPS

我添加以下內容在網站根目錄下的.htaccess文件,

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

和(我以爲它會)重定向一切,所以後來我試圖

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^http://example(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} 

,但也出現於r將所有東西都轉換

回答

1

RewriteRule只匹配主機和端口(在VirtualHost上下文中)或相關文件系統路徑(在Directory/htaccess上下文中)之後的URL部分;所以試圖在RewriteRule中匹配一個主機名是行不通的。

然而%{HTTP:Host}會給你Host HTTP標頭,這樣的RewriteCond可以匹配反對:

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP:Host} =example.com 
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R] 

的缺點是mod_rewrite的會發現,你重寫有條件根據HTTP頭,並且將增加Vary: Host標題。如果你不想要,你可以先將它存儲到一個變量中,然後對該變量執行RewriteCond:

RewriteRule . - [E=HTTP_HOST_NO_VARY:%{HTTP:Host}] 

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteCond %{ENV:HTTP_HOST_NO_VARY} =example.com 
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R] 
相關問題