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

时间:2017-03-29 09:18:16

标签: 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做一些事情,因为从我读到的内容将会在它下面的规则中创建一个例外。

我的论坛在http://www.xxxx.xxx/forum.html

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

1 个答案:

答案 0 :(得分:1)

您可以在.htaccess文件中使用以下规则。这样做首先检查HTTP是否未打开,如果没有,则它会将所有内容转发到HTTP,但目录forum除外。第二个规则检查HTTP是否打开,如果是,则它会将forum重定向回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]
相关问题