所有http流量到domain.com,所有https到sub.domain.com用htaccess

时间:2015-04-27 12:01:23

标签: apache .htaccess mod-rewrite https

我有两个域名www.domain.com和sub.domain.com,我想将所有http流量重定向到www.domain.com,将所有https流量重定向到sub.domain.com。例如,如果调用的URL是http:// sub.domain.com/index.php,则服务器必须将URL重写为http:// www.domain.com/index.php,如果调用的URL是https:// www.domain.com/index.php,服务器必须将网址重写为https:// sub.domain.com。

我在htaccess中有这段代码,但它无法正常工作:

RewriteEngine On

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www.domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^/?$ "http\:\/\/sub\.domain\.com\/" [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^sub.domain.com$
RewriteRule ^/?$ "http\:\/\/domain\.com\/" [R=301,L]

它将https正确地重定向到sub.domain.com但仅在没有指示页面的情况下(https:// domain.com/index.php/some-page not working and https:// domain.com yes) 。因为http根本不起作用。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以将此代码放在root htaccess

RewriteEngine On

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

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

确保 domain.comsub.domain.com共享同一个文档根文件夹。否则,您将必须在两个htaccess(每个根域文件夹一个)

中拆分htaccess代码

/domain/root/folder/.htaccess

RewriteEngine On

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

/subdomain/root/folder/.htaccess

RewriteEngine On

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