与mod_rewrite斗争

时间:2013-10-29 15:59:30

标签: regex apache .htaccess mod-rewrite ssl

至少几天我一直在与mod_rewrite htaccess挣扎,但仍然无法解决这个问题。

我想在我的网站上强制使用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,并且不断更正我的地址https://www.mysite.com。 在一种情况下,它允许我本地连接到我的服务器。当我输入https://192.168.1.10(我的本地服务器地址)时。但它一直让我谨慎,不能保持这种方式。

当我输入http://192.168.1.10时,它会将我重定向到https://www.mysite.com

如何让所有重定向单独留下我的ip?

根据我的逻辑,无论我的REMOTE_ADDR192.168.1.30,都不应该重定向我。

2 个答案:

答案 0 :(得分:1)

你可以尝试这条规则:

RewriteEngine On

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

答案 1 :(得分:0)

我认为你根本不需要重写规则。由于HTTP在端口443上侦听端口80和HTTPS,因此您可以拥有三个不同的VirtualHost。

  1. 第一个侦听端口80并绑定到您的私人IP地址。
  2. 第二个侦听端口80,但它在301中重定向到https url
  3. 最后一个侦听端口443(HTTPS)
  4. 但是,您可能必须将此逻辑从htaccess文件移至.conf文件。

    由于apache开始按照.conf文件中定义的顺序查找匹配的VirtualHost(视情况而定为http.conf或apache.conf),因此排序非常重要。