繁体   English   中英

与mod_rewrite斗争

[英]Struggle with mod_rewrite

我在至少几天里一直在用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?

按照我的逻辑,无论我的REMOTE_ADDR是否为192.168.1.30 ,它都不应重定向我。

您可以尝试以下规则:

RewriteEngine On

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

我认为您根本不需要重写规则。 由于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,因此顺序非常重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM