我发现了几个相关问题,但非主题似乎有效,所以我不得不再问:
我使用的是wordpress网站,我想要一个网站使用https(/kontakt/
)。所有其他网站都必须使用http
(由于内容重复等原因)。
我尝试了一个名为Wordpress HTTPS
的插件,应该这样做,但插件已过时(3年没有更新),也没有按预期工作。
对于这种情况,我考虑过使用.htaccess
。这些是我的htaccess文件:
我的网址与此完全相同: http://www.example.com/kontakt/
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
RewriteCond %{HTTPS} off
RewriteRule ^kontakt/$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE,NC]
# change kontaktform
RewriteCond %{HTTPS} off
RewriteRule ^/kontakt https://www.example.com/kontakt/ [R=301,L,QSA]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/kontakt/
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L,QSA]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
此尝试取自此处:
force one page to use HTTPS and the others to use HTTP with .htaccess
但是没有做到这一点。我现在的问题是:
a)该网站未被重定向到https(我可以确认htaccess正在运行,因为我可以按需生产500个)
b)一旦它在https://上,所有其他方都保留在该协议上(已经在链接预览中)
我真正想要的是什么:
如果网站= / kontakt / - &gt;使用https
ELSE使用HTTP
答案 0 :(得分:1)
请尝试以下规则:
RewriteEngine On
RewriteBase /
# add www if missing in domain name
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,NE,L]
# if http and /kontakt/ then make it https
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} /kontakt/ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE,NC]
# if https and NOT /kontakt/ then make it http
RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} !/kontakt/ [NC]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE,NC]
# default WP rules
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
我为此使用了%{THE_REQUEST}
变量。 THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行一些与%{REQUEST_URI}
变量不同的重写规则后,不会被覆盖。
在测试之前清除浏览器缓存,并在Chrome开发工具中测试,并禁用缓存。