【问题标题】:Struggle with mod_rewrite与 mod_rewrite 斗争
【发布时间】:2013-11-08 21:51:33
【问题描述】:

我在 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

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

按照我的逻辑,无论我的REMOTE_ADDR192.168.1.30,它都不应该重定向我。

【问题讨论】:

  • 您试过了吗:RewriteCond %{REMOTE_ADDR} !^xxx\.yyy\.www\.zzz, xxx.yyy.www.zzz 是您的 ISP 提供的世界远程 Internet IP?跨度>

标签: regex apache .htaccess mod-rewrite ssl


【解决方案1】:

你能试试这个规则吗:

RewriteEngine On

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

【讨论】:

  • 不幸的是它不起作用。它的工作方式与我的脚本工作方式相同。如果我输入http://192.168.1.10,它会将我的地址更正为https://www.mysite.com
  • 我的错误,您的解决方案完美。不知道其他人在 apache 的 *.conf 中添加了永久重定向。非常感谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2014-10-04
    • 2019-08-10
    相关资源
    最近更新 更多