1

我在 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(我的本地服务器地址)时。但它不断向我抛出 SSL 警告,不能保持这种方式。

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

如何让它让我的 ip 不受所有重定向的影响?

根据我的逻辑,无论 myREMOTE_ADDR是什么,它都不应该重定向我192.168.1.30

4

2 回答 2

1

你可以试试这个规则:

RewriteEngine On

RewriteCond %{REMOTE_ADDR} !^(192\.168\.|127\.0\.0\.1)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
于 2013-10-29T19:11:21.257 回答
0

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

  1. 第一个侦听端口 80 并绑定到您的私有 IP 地址。
  2. 第二个监听端口 80,但它在 301 中所做的一切都重定向到 https url
  3. 最后一个监听 443 端口(HTTPS)

但是,您可能必须将此逻辑从htaccess文件移动到您的.conf文件。

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

于 2013-10-29T16:06:30.227 回答