RewriteCond 有时有效

RewriteCond works sometimes

这是我在 /etc/apache2/sites-enabled/dynamic-vhosts.conf:

上的代码
<VirtualHost *:80>            
            DocumentRoot "/var/www/SITE.com.br"
            ServerName SITE.com.br

                RewriteEngine On
                RewriteCond %{REMOTE_ADDR} 10\.10\.10\.[0-255]
                RewriteRule ^(.+)$ https://SITE.com.br/ [R=301]

我的问题是,在某些情况下它强制使用 HTTPS,但在其他情况下则不是。 示例:在某些桌面浏览器上,它重定向到 HTTPS,但在移动浏览器或其他 desktops/servers 浏览器上,它不是。

有人可以帮助我吗?

试试这个,但我不确定这是否会解决您的问题:

<VirtualHost *:80>            
            DocumentRoot "/var/www/SITE.com.br"
            ServerName SITE.com.br

                RewriteEngine On
                RewriteCond %{REMOTE_ADDR} ^10\.10\.10\.
                RewriteRule ^(.+)$ https://SITE.com.br/ [R=301]

我不太确定你为什么使用 RewriteCond %{REMOTE_ADDR},你知道它实际上使 HTTP 到 HTTPS 重定向只发生在远程 IP 地址(客户端的 IP 地址)从 10.10.10.0到 10.10.10.255?而且手机IP地址在10.10.10之外的可能性非常大,比如10.10.11.123!

如果您想为任何 IP 地址重定向到 HTTPS, 试试这个:

<VirtualHost *:80>            
            DocumentRoot "/var/www/SITE.com.br"
            ServerName SITE.com.br

                RewriteEngine On
                RewriteRule ^(.+)$ https://SITE.com.br/ [R=301]

您还可以将 RewriteRule ^(.+)$ https://SITE.com.br/ [R=301] 中的 ^(.+)$ 简化为 RewriteRule ^ https://SITE.com.br/ [R=301]。由于'^(.+)' 的意思是“匹配并存储当前行中的所有内容”,它使用更多内存 (RAM),^ 并没有真正在内存中存储任何内容。