我是 htaccess、apache 和 regex 的真正初学者,所以如果我问愚蠢的问题,请原谅我。
这是我的情况:
我有一个论坛,允许用户在
http://mysite.net or
https://mysite.net.
这个想法是,它是一个带有自签名证书的廉价共享主机上的爱好项目,所以我真的只需要版主使用 https——普通用户、访客、搜索引擎应该使用 HTTP。
论坛软件似乎对相对链接有点无知,总是为内部页面创建绝对链接。因此,如果使用 HTTP 版本的论坛的用户发布到另一个主题的内部链接,它将是
http://mysite.net/topic....
如果使用 HTTPS 版本的用户发布内部链接,它将是 httpS://.....
问题:
如果来自 HTTP 版本的用户单击 HTTPS 链接,他将被重定向到 https 站点,这是不可取的,因为来自浏览器的自签名证书警告会吓到用户。如果来自 HTTPS 版本的版主单击 HTTP 链接,情况会更糟,因为他会被取消登录(我确实使用了安全会话 cookie,并且在那种情况下会话会中断!)。
解决方案:
我在考虑 htaccess 重写规则,比如“IF 推荐人包含
https://mysite...
并且请求的网址有
http://mysite.net/something
将其重写为
https://mysite.net/something".
反之亦然。
但我不太了解 apache mod_rewrite 和 regex 也不知道该怎么做。在 Stackoverflow 上搜索了很多教程和几个问题,但无法调整示例。我得到的唯一结果是无/无条件重定向/无限循环。
以下是一些对我不起作用的经过尝试的规则:
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^https://mysite\.net [NC]
RewriteCond %{REQUEST_URI} ^http://mysite\.net [NC]
RewriteRule ^(.*)$ https://mysite.net/$1 [R=301,NC,L]
或者
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]