通过.htaccess从HTTPS中排除一个页面,但将该页面上的链接重定向回HTTPS

时间:2017-08-31 15:35:41

标签: wordpress .htaccess

我正在使用WordPress。我需要强制所有页面都使用HTTPS,期望一个具有iframe的特定页面具有无法替换的不安全内容。

我在.htaccess文件中尝试了很多不同的配置。他们中的一些人比其他人工作得更好,但他们都没有完全奏效。

我遇到的问题是网站上的导航菜单使用相对链接。我找到了一些允许我在iframe页面强制使用HTTP的选项,但是点击该页面(iframe外部)的任何导航链接都不会重定向回这些页面的HTTPS版本。

以下是我遇到的一个不太有效的例子。

<IfModule mod_rewrite.c>
RewriteEngine On
# Go to https if not on /iframe/
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} !^/iframe/$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# Go to http if you are on /iframe/
RewriteCond %{SERVER_PORT} !80 
RewriteCond %{REQUEST_URI} ^/iframe/$ [NC]
RewriteRule ^(.*)$ https//www.example.com/$1 [R=301,L]
</IfModule>

1 个答案:

答案 0 :(得分:0)

您可以在.htaccess文件中使用以下规则来实现此目的。这样做首先检查HTTP是否未打开,如果没有,则它会将所有内容转发到HTTP,但目录/iframe/除外。第二个规则检查HTTP是否打开,如果是,则它会将/frame/重定向回HTTP。

RewriteEngine On

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

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

确保在>测试之前清除缓存

修改

RewriteEngine On

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

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