2013-10-29 86 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,所以排序非常重要。