在.htaccess上强制HTTPS,但仅限于生产

时间:2014-09-12 23:25:56

标签: apache .htaccess mod-rewrite ssl https

我一直在寻找能够强制https://的代码片段。我发现了这个:

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

问题是当我想在本地工作时,如“localhost”或“example.dev”这样的网址会尝试重定向到https://localhost(它不起作用)。

我该如何解决这个问题?

(总而言之,我希望上面的代码片段仅在我用于制作时才能使用,例如“example.com”)

3 个答案:

答案 0 :(得分:12)

  

我希望上面的代码段仅在我用于制作时才能使用,例如example.com

您可以使用重写条件将规则限制为仅定位example.com

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301]

答案 1 :(得分:1)

这有些先进,但您可以尝试将服务器放入 一个名为servers.txt的文件

RewriteEngine on
RewriteMap lb rnd:servers.txt
RewriteRule ^/(.*) http://${lb:servers}/$1 [P,L]
serverlist.txt will contain a list of the servers:

## serverlist.txt file con
servers localhost.example.com|server1.example.com

上述答案对于本地和制作来说已经足够了 mod重写行为的差异。我会版本的 git或subversion中的.htaccess(你曾经使用过) 在这种情况下。

这主要用于负载平衡,但您可以在机制中应用它。

答案 2 :(得分:0)

对于Apache,将规则放在<IfModule mod_ssl.c></IfModule>块中,并在本地服务器上禁用ssl模块。

<IfModule mod_ssl.c>
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>