2014-09-12 42 views
3

我一直在四处寻找的代码片段,这将迫使https://。我发现这一点:力HTTPS上的.htaccess但仅限于生产

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

问题是,当我想在本地工作,所以一个网址,如“本地主机”或“example.dev”它试图重定向到https://localhost(它不工作)。

我该如何解决这个问题?

(所以总括起来,我想,当我用它生产上面的代码段才起作用,如“example.com”)

回答

8

我想,当我使用它在生产上面的代码片段只工作,比如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] 
+0

将带或不带这项工作的'www'?所以要么会强制SSL? – Jordan 2017-02-03 21:23:36

+0

是的,没错 – anubhava 2017-02-03 21:38:25

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 

以上回答是与国防部重写行为本地生产 差异不够好。我会版本的 的.htaccess在这种情况下的git或颠覆(无论你使用哪一个) 。

这主要是针对负载平衡,但你可以应用在你的机制。

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> 
相关问题