2012-01-06 153 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