2014-09-12 22 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> 
相關問題