2010-05-25 117 views

回答

2

試試這個規則:

RewriteCond %{HTTP_HOST} =example.com 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

如果它使用這隻會將請求重定向到主機example.com並保持HTTPS。

+0

我很好奇......你能解釋一下'^(s)|'嗎? – eyelidlessness 2010-05-26 00:14:34

+0

@eyelidlessness:* HTTPS *的值是「on」或「off」。所以'%{HTTPS} s'可以是'ons'或'offs'。如果它是'ons',模式'^ on(s)|'匹配,並且第一組的匹配是's'。否則,如果它處於「off」狀態,則取空分支,第一組的匹配爲空。 – Gumbo 2010-05-26 07:06:44

+0

哦,很酷。我沒有注意到'%{HTTPS} s'末尾的's',這很有道理。謝謝! – eyelidlessness 2010-05-26 18:57:56

0

這並不難,雖然這是一個有點乏味。還有一個名爲HTTPS的重寫條件變量,即使在沒有運行mod_ssl的情況下也是安全的。然後你會鏈中的兩個的RewriteCond檢查,並獲得這樣的:

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} !^something\.com$ 
RewriteRule ^(.*)$ https://www.something.com/$1 [R=301,L] 

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} !^something\.com$ 
RewriteRule ^(.*)$ http://www.something.com/$1 [R=301,L] 

的缺點是,你現在硬編碼有問題的領域進入的.htaccess。我不知道有什麼方法可以在不對域進行硬編碼的情況下工作。

+0

如果它的http://something.domain.com需要保持這種方式怎麼辦 – wesside 2010-05-25 20:01:15

+0

啊,我的錯誤...我會編輯答案! – ivans 2010-05-25 20:17:03

相關問題