我有一个完全支持HTTPS的WordPress Multisite博客。
现在我需要强制单个页面到HTTP以嵌入仅HTTP iframe
(HTTP嵌入在HTTPS页面内不起作用)。使用 force 我的意思是在页面加载HTTPS时重定向到HTTP。
该网站适用于HTTPS,但尝试访问应重定向到普通HTTP的网页,服务器会将访问者重定向到网站主页。
以下是我当前的.htaccess
重写规则:
RewriteEngine On
# Redirect all to HTTPS if not some-page.
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^example.com # Check host as some subdomains are not used with HTTPS.
RewriteCond %{REQUEST_URI} !^/some-page(/.*)?
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
# Redirect some-page to HTTP if HTTPS.
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^example.com
RewriteCond %{REQUEST_URI} ^/some-page(/.*)?
RewriteRule (.*) http://%{HTTP_HOST}/$1 [R=301,L]
# WordPress below here
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
我希望这些规则能够做到:
some-page.*
之外的任何页面重定向到HTTPS版本。some-page.*
不重定向。some-page.*
,请重定向到HTTP。会发生什么:
some-page.*
的所有请求都只是重定向到index.php
,这意味着对example.com/some-page
的所有请求都会重定向到example.com/
。这两种情况都会发生:HTTP和HTTPS请求。最后,浏览器最终到达https://example.com/
页面。此外:
.htaccess
不包含任何其他内容。some-page.*
- > WordPress规则下的HTTP重定向:除了some-page.*
的HTTPS访问之外没有任何效果(不会重定向到索引)。所有指针都赞赏。
编辑:
我试图为此验证一些WordPress的东西。出于某种原因,WordPress可能是进行重定向的人。所有访问some-page.*
的尝试都会导致wp_redirect
网站所在地和状态301
触发。
我在我的WordPress配置文件中创建了以下if-else
语句,但它没有效果(我假设某些 HTTP-> HTTPS重定向正在发生):
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
define( 'WP_SITEURL', 'https://example.com' );
define( 'WP_HOME', 'https://example.com' );
} else {
define( 'WP_SITEURL', 'http://example.com' );
define( 'WP_HOME', 'http://example.com' );
}
根据我在线阅读的一些指南,我还尝试将.htaccess
规则更改为以下规则:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^example.com
RewriteCond %{REQUEST_URI} !^/some-page
RewriteRule !^some-page.* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^example.com
RewriteCond %{REQUEST_URI} ^/some-page
RewriteRule ^some-page.* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
但它似乎没有改变任何东西。
编辑2:
似乎.htaccess
似乎直接将some-page.*
重写为index.php
。调试并挂钩到WordPress'redirect_canonical()
后,它显示与some-page.*
无关。相反,它只显示它将https://example.com/index.php
重定向到https://example.com/
。这可能解释了早期wp_redirect
与301
。
我尝试用http://htaccess.madewithlove.be/检查重写,并说重写(应该)按预期工作。
编辑3:
有些重写调试。一切正常,但由于某种原因,some-page.*
应该重定向到非HTTPS,服务器值%{HTTPS}
在所有重写尝试中都是off
(即使加载页面时也是如此) HTTPS),基本上使规则无用。如果我删除HTTPS检查,我会得到一个重写循环(从HTTPS到HTTP,依此类推some-page.*
个网址。)。
与SERVER_PORT
重写条件相同的结果。所有请求似乎都是80
。
何时适合检查连接端口/ HTTPS?