如何强制所有流量到https?

时间:2013-08-15 05:06:32

标签: apache .htaccess ssl https apache2

我尝试使用.htaccess将所有流量发送到https。我在这个答案中使用了这个例子:Need to redirect all traffic to https

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

这并不是为了重定向任何东西。我把它放在var/www但它似乎没有任何效果。我做错了什么?

2 个答案:

答案 0 :(得分:4)

在重写规则结束时尝试[R,L]:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

R重定向到提供的链接,如果满足条件,L会中断流程。 作为参考,您可以看到:

  

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

答案 1 :(得分:3)

如果这是您在htaccess文件中的唯一规则,并且它在您的文档根目录中,那么您需要检查一些内容,因为规则没问题。

  1. 确保已加载mod_rewrite。 httpd.conf文件中应该有一行看起来像:

    LoadModule rewrite_module modules/mod_rewrite.so
    

    确保它没有注释。

  2. 确保您的htaccess文件所在的目录(应该是您的文档根目录)允许通过htaccess覆盖服务器设置。在您的vhost或服务器配置中,应该有

    的内容
    <Directory "/var/www/">
        AllowOverride All
    
        ... (some other stuff)
    </Directory>
    

    确保AllowOverride至少为FileInfo

  3. 确保您的文档根目录实际上是您的htaccess文件所在的位置。您的vhost配置应该有如下行:

    DocumentRoot /var/www/
    
  4. 确保文档根目录适用于正确的vhost。如果您有SSL和非SSL的单独vhost,请确保htaccess文件位于非SSL vhost 的文档根中。