mod_rewrite 在内部访问时有效,但在外部访问时无效

mod_rewrite 在内部访问时有效,但在外部访问时无效

我在 apache 配置中使用以下 mod_rewrite 规则强制所有流量通过 https:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

当我从同一网络内部访问服务器时,此方法效果很好。当我从外部访问时,不会发生重写,也不会更改为 https。在两种情况下,我都使用相同的 URL 来访问它。

知道为什么会发生这种情况以及可以采取什么措施吗?

编辑:由于我的声誉较低,我尚无法回答我自己的问题,但我发现了这个问题:

解决方案

该服务器需要符合 PCI 标准,因此我身后的防火墙完全阻止了端口 80。这意味着来自外部的请求甚至无法到达进行重写的位置。

这意味着您必须首先请求 https,因为我无法转发它。(也许我可以看看是否可以让防火墙执行此操作,但这是另一个问题。)

答案1

我认为您希望RewriteCond基于服务器端口:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

编辑:

尽管如此,你已经确定规则不是问题。

打开你的重写日志在您的 apache 配置文件或 vhost 配置中查看 mod_rewrite 正在做什么。

另外,提供输出iptables -L

相关内容