在上使用RewriteCond%{HTTPS}时,如何在.htaccess RewriteRule变量中引用web根目录

在上使用RewriteCond%{HTTPS}时,如何在.htaccess RewriteRule变量中引用web根目录,.htaccess,.htaccess,这就是我要做的。我在一个网站上有一些脚本,我正在重写URL以强制他们使用https://。然后我想做的是,当我从HTTPS页面导航回HTTP时重写URL。这就是我现在所拥有的东西,它并没有完全按照我所希望的方式工作 # For HTTPS pages: RewriteCond %{HTTPS} off RewriteRule ^(register/|cms/(.*))$ https://%{HTTP_HOST}/$1 [R=301,L] # For non-HTTPS pages: Rewri

这就是我要做的。我在一个网站上有一些脚本,我正在重写URL以强制他们使用https://。然后我想做的是,当我从HTTPS页面导航回HTTP时重写URL。这就是我现在所拥有的东西,它并没有完全按照我所希望的方式工作

# For HTTPS pages:
RewriteCond %{HTTPS} off
RewriteRule ^(register/|cms/(.*))$ https://%{HTTP_HOST}/$1 [R=301,L]

# For non-HTTPS pages:
RewriteCond %{HTTPS} on
RewriteRule ^(about/|contact/)$ http://%{HTTP_HOST}/$1 [R=301,L]
我遇到的问题是,虽然像about/和contact/这样的页面被重写回HTTP,但我不知道如何引用文档根,所以不幸的是它仍然是https://。我喜欢使用相对URL,所以如果有一个简单的htaccess解决方案,我不想进入我的源代码并将所有内容更改为绝对

我的问题:如何在重写规则中正确引用web根目录?

还有,有没有一种更有效、更全面的方法来完成我一直不知道要完成的任务,因为我还没有找到其他有这个问题的人。我对.htaccess不是很熟悉。在进行各种重写操作时,我学到了足够的知识,因为我永远不需要完整的功能,而且我发现文档很繁琐,很难理解


谢谢

用于匹配根使用

RewriteCond %{HTTPS} on
RewriteRule ^$ http://%{HTTP_HOST}/$1 [R=301,L]
或者将它们与另一条规则结合起来

RewriteRule ^(about/|contact/|)$ http://%{HTTP_HOST}/$1 [R=301,L]
至于catch-all-expect/register和/cms(这就是你的意思,对吧?)。我认为这应该能奏效

# For HTTPS pages:
RewriteCond %{HTTPS} off
RewriteRule ^(register/|cms/(.*))$ https://%{HTTP_HOST}/$1 [R=301,L]

#prevent rules beneath this one in this htaccess file from being applied when url start with register of cms (doesn't do anything else)
RewriteRule ^(register/|cms/) - [L]

#don't force http for resources, to prevent partial encryption errors
RewriteRule ^(css/|images/) - [L]

# For non-HTTPS pages:
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

哇,我真的应该知道,将引用留空就是对根的引用。谢谢你。不幸的是,只需将空白引用添加到根目录中,就会导致我的注册页面只被部分加密(对于使用firefox的人来说,这看起来根本没有加密)。我猜这是因为我在注册页面的HTML标记中引用了从根目录开始的图像和其他链接项?好吧,重写在除了根目录之外的每个页面上都有效,所以我将在那里使用绝对引用,省去我自己的麻烦。我编辑了这篇文章,没有在某些目录(本例中是css和图像)上强制使用http(而不是https)。太棒了!我现在正按照我想要的方式工作。谢谢