Apache 使用htaccess将除一个页面外的所有页面重定向到https

Apache 使用htaccess将除一个页面外的所有页面重定向到https,apache,.htaccess,http,https,Apache,.htaccess,Http,Https,我有一个新网站,并试图使它的https。我在一个页面上嵌入了一个论坛。论坛没有https!因此,我需要通过HTTP而不是HTTPS提供这一页。我使用标准的htaccess代码强制所有页面转到HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 我读了一点语法,但它非常复杂。我想我想对RewriteCond做点什么,因为从我读到

我有一个新网站,并试图使它的https。我在一个页面上嵌入了一个论坛。论坛没有https!因此,我需要通过HTTP而不是HTTPS提供这一页。我使用标准的htaccess代码强制所有页面转到HTTPS

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
我读了一点语法,但它非常复杂。我想我想对RewriteCond做点什么,因为从我读到的内容来看,这将在它的正下方创建一个规则的异常

我的论坛在


如何编写规则以对该页面进行例外处理?

您可以在
.htaccess
文件中使用以下规则。这样做的目的是首先检查HTTPs是否未打开,如果未打开,则它会将除目录
论坛
之外的所有内容转发到HTTPs。第二条规则检查HTTPs是否开启,如果开启,它将重定向
论坛
回HTTP

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{REQUEST_URI} !^\/(forum)
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301]

RewriteCond %{HTTP:X-Forwarded-SSL} =on
RewriteCond %{REQUEST_URI} ^\/(forum)
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R=301]
在测试之前,请确保清除缓存。如果您对上述规则有问题,还可以尝试以下操作:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/forum
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/forum
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

你知道如果你不重定向所有页面,你就不能使用HST,如果你不使用HST,你很容易受到MitM/sslstrip攻击?非常接近!我正在测试它,我想也许在第4行的末尾,在单词论坛后面应该有一些东西。因为当我使用url进行测试时,测试页面不会返回结果。但是伙计,你真是太棒了!你做了一件非常接近实际效果的事情,这比我过去两周所做的要好得多!对那个网站进行认真的测试。它与可与
.htaccess
一起使用的所有功能不兼容。您最好通过服务器进行测试,并将
R=301
更改为
R=302
,以便它只是一个tmeporary重定向。如果它对你有用,把它改回301:)我从一开始(大约一周前)就使用了301。因此,也许最好将论坛url更改为forum1或其他正确的方式,让旧的url“消失”?这个网站是全新的,我没有做过任何SEO,我想现在还没有访问者,所以我不在乎删除一个页面。在测试时总是使用
302
,这将避免将来出现这种问题:)所以是的,删除页面是最简单的选择。虽然,我不会为它命名为
forum1
:PWOW,它确实有效!真是太棒了!非常感谢你,你真的是上师!非常令人印象深刻!