需要将所有流量重定向到https

时间:2010-07-13 17:29:45

标签: .htaccess redirect

我想将转到http://example.com的所有流量重定向到https://example.com

http://example.com/abouthttps://example.com/about

相同

我认为会是这样的:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

5 个答案:

答案 0 :(得分:65)

这对我有用:

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

如果流量通过非SSL HTTP进入,则重定向到用户最初尝试访问的任何页面的HTTP等价物。它也不涉及任何mod_rewrite选项,因此很容易阅读。

旁边咆哮:为什么每个人都觉得需要明确设置重定向的HTTP代码并将其中一个重写标记为“最后一个”?说真的,我在最近几天看到了几十个看起来相同的htaccess规则。

答案 1 :(得分:12)

这是一个previous answer using .httaccess,但是在评论中添加了更改,还有一些来自我:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://my.domain.name%{REQUEST_URI} [L,R=301]

注意:

  • 这适用于用户无权访问主配置但可以访问.htaccess规则的情况。如果您有权访问主配置,请使用mod_alias solution instead
  • 对我来说,如果没有定义RewriteBase,就不会选择规则。明确定义它可以消除一些服务器设置的模糊性。
  • 至少在某些配置中,%{HTTPS}在使用http时未设置为off,但为空,因此!on是比off更可靠的规则。
  • 对于显式主机名,您不依赖于客户端主机标头或服务器配置。但是,显式主机名自然假设只有一个域可以重定向。主机头存在一些相当大的问题,例如包含端口和客户端提供的数据。根据{{​​3}}的建议,另一种方法是使用%{SERVER_NAME}。如果您考虑使用它,请查看Apache Wiki中的警告 - 它依赖于其他配置是否正确。
  • R=301表示它是永久重定向,因为它通常意味着在这种情况下。如果你认为它是暂时的,可以省略或指定为R=302
  • L表示应用此请求的最后一条规则。如果您怀疑或知道此后还有其他规则您不想申请,请保留。如果这是文件的唯一规则,则可以删除。

答案 2 :(得分:7)

根据Apache documentation,使用mod_aliasmod_rewrite更适合此任务。也就是说,为了将所有HTTP流量重定向到HTTPS,可以:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost >

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost >

有关此配置的两点注意事项:

  1. 您需要访问主服务器配置文件才能使此配置生效。 VirtualHost指令仅在“server config”上下文中有效。
  2. 请记住,mod_rewrite指令在mod_alias指令之前处理。如果您的RewriteRule文件中已经有大量的.htaccess s,那么使用mod_rewrite配置可能会更好。

答案 3 :(得分:1)

在所有条件下均可工作:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301] 

<IfModule>

答案 4 :(得分:0)

经过研究后,这个版本对我有用,版本有所不同。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]