在子目录上强制https并将非www流量重定向到www

时间:2014-01-28 20:29:53

标签: .htaccess mod-rewrite redirect https apache2

所以在过去的几个小时里,我一直对我的.htaccess文件无法正常工作感到沮丧。

我有两个子目录:secure.mysite.ca和storage.mysite.ca,需要加密ssl。当我将https放在网址前面时(https://secure.mysite.ca/https://storage.mysite.ca/),这些网站会有效,但当我将http放在前面时,它会重定向到我的根网站(http://mysite.ca/)。当有人试图转到未加密版本时,我想重定向到网站的https版本。

另外,我想将访问http://mysite.ca/的所有流量重定向到http://www.mysite.ca/(即前面的www)

这个.htaccess文件曾经在一年前工作但现在却没有。

这是我在根文件夹中找到的htaccess文件:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite\.ca$ [NC]
RewriteRule ^(.*)$ http://www.mysite.ca%{REQUEST_URI} [R=permanent,L]

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^(secure|storage)\. [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]  

我做错了吗?我应该将.htaccess文件放在子目录中吗?

编辑:这是secure.fixnode.ca,storage.fixnode.ca和www.fixnode.ca的virtualhost配置文件。请让我知道我做错了什么

storage.fixnode.ca.conf

<VirtualHost *:443>
DocumentRoot "/var/www/fixnode_website/content/Online Storage"
<Directory "/var/www/fixnode_website/content/Online Storage">
allow from all
Options +Indexes
</Directory>
SSLEngine on
ServerName storage.fixnode.ca
SSLCertificateFile /path/to/cert/storage.crt
SSLCertificateKeyFile /path/to/private key/private.key
</VirtualHost>

secure.fixnode.ca.conf

<VirtualHost *:443>
DocumentRoot "/var/www/fixnode_website/content/Secure Login"
<Directory "/var/www/fixnode_website/content/Secure Login">
allow from all
Options +FollowSymlinks
</Directory>
SSLEngine on
ServerName secure.fixnode.ca
SSLCertificateFile /path/to/cert/cert.crt
SSLCertificateKeyFile /path/to/cert/mykey.key
</VirtualHost>

最后是我的根域www.fixnode.ca.conf的虚拟主机

<VirtualHost *:80>
DocumentRoot /var/www/fixnode_website
<Directory "/var/www/fixnode_website">
allow from all
Options +Indexes
</Directory>
ServerAlias fixnode.ca
ServerName www.fixnode.ca
</VirtualHost>

2 个答案:

答案 0 :(得分:1)

您需要将此规则放在两个子域的子目录中:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(secure|storage)\. [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

答案 1 :(得分:1)

如果您最近对系统进行了更改,则可能覆盖了您的apache配置文件(例如httpd.conf or apache2.conf),这可能会将选项重置为默认值。