2012-01-06 86 views
8

我有這個簡單的重寫規則,它正常工作下HTTP重寫規則對HTTP和HTTPS

RewriteCond %{HTTP_HOST} ^www\.siku-siku\.com$ 
RewriteRule ^/work/all.html /portfolio/ [L,R=301] 

然而,該規則並沒有考慮到效果,當我在HTTPS 。我修改了以下規則集,但無濟於事。

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} ^www\.siku-siku\.com$ 
RewriteRule ^/work/all.html /portfolio/ [L,R=301] 

我怎樣才能讓這條規則對HTTPHTTPS工作兩者兼而有之?如果我需要提供更多信息,請告訴我。

+1

是任何一個平臺它是一個.htaccess還是一個虛擬主機?如果是虛擬主機,只需將重寫規則放在一個單獨的文件中,並在兩個虛擬主機中獲取它的源代碼 – fge 2012-01-06 15:11:16

+0

這是一個虛擬主機。 @fge:你的意思是這兩個虛擬主機的非SSL和SSL?對不起,這可能聽起來很基本,但我剛開始熟悉Apache mod-rewrite。 – moey 2012-01-06 15:25:36

+1

那麼,mod_rewrite指令就像其他任何指令一樣,如果你把它們放在另一個文件中,並且從另一個文件包含這個文件,它就會這樣做。所以是的,只要將規則寫入另一個包含在SSL和非SSL vhost中的文件(在HTTPS上刪除'RewriteCond')即可。 – fge 2012-01-06 15:28:08

回答

8

Apache使用了SSL配置不同的虛擬主機:

<IfModule mod_ssl.c> 
    <VirtualHost _default_:443> 
    RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^www\.siku-siku\.com$ 
    RewriteRule ^/work/all.html /portfolio/ [L,R=301] 
    ... 
    </VirtualHost> 
</IfModule> 

此連結與Debian的SSL配置Apache的例子,但應該很容易推斷你是http://www.debian-administration.org/articles/349