2013-10-29 84 views
1

我在mod_rewrite htaccess中掙扎了至少幾天,仍然無法弄清楚。與mod_rewrite奮鬥

我想在我的網站上強制使用HTTPS SSL,但僅限於網絡外部。

我有這樣的事情:

RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.30 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.mysite.com/$1 [R,L] 

我的本地IP是192.168.1.30,是它讓我糾正ADRESS到https://www.mysite.com。 在一種情況下,它允許我在本地連接到我的服務器。當我輸入https://192.168.1.10(我的本地服務器地址)。但它不斷拋出我不能保持這種方式的SSL謹慎。

當我鍵入http://192.168.1.10它重定向我https://www.mysite.com

如何使它從所有重定向獨自離開我的IP?

對於我的邏輯,它不應該重定向我,不管我的REMOTE_ADDR192.168.1.30

+0

你試過!的RewriteCond%{REMOTE_ADDR}^XXX \ .yyy \ .www \ .zzz,xxx.yyy.www.zzz是你的世界遠程互聯網您的ISP提供的IP? – jacouh

回答

1

你可以試試這個規則:

RewriteEngine On 

RewriteCond %{REMOTE_ADDR} !^(192\.168\.|127\.0\.0\.1) 
RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
+0

不幸的是它不起作用。它的工作方式與我的腳本工作方式相同。如果我輸入'http:// 192.168.1.10',它會將我的地址更正爲https:// www.mysite.com' – Flash

+1

我的錯誤,您的解決方案完美無缺。不知道其他人在apache的* .conf中添加了永久重定向。非常感謝。 – Flash

+0

不客氣,很高興它解決了。 – anubhava

0

我不認爲你需要重寫規則。由於HTTP偵聽端口80和端口443上的HTTPS,因此可以有三個不同的VirtualHost。

  1. 第一個偵聽端口80並綁定到您的私有IP地址。
  2. 其次爲偵聽端口80,但它的作用在301重定向到HTTPS URL
  3. 的最後一個監聽端口443(HTTPS)

但是,您可能必須將這種邏輯從htaccess文件到您的.conf文件。

由於apache按照在.conf文件(http.conf或apache.conf中視情況而定)中定義的順序開始查找匹配的VirtualHost,所以排序非常重要。