将所有URL重定向到HTTPS,但强制一个到HTTP(Apache)

时间:2015-06-26 13:44:06

标签: wordpress apache .htaccess redirect https

我有一个完全支持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]

我希望这些规则能够做到:

  1. 如果不是HTTPS,请将example.com中除some-page.*之外的任何页面重定向到HTTPS版本。
  2. 如果不是HTTPS并且访问some-page.*不重定向。
  3. 如果是HTTPS并访问some-page.*,请重定向到HTTP。
  4. 会发生什么:

    1. 所有页面都按需要转到HTTPS。
    2. some-page.*的所有请求都只是重定向到index.php,这意味着对example.com/some-page的所有请求都会重定向到example.com/。这两种情况都会发生:HTTP和HTTPS请求。最后,浏览器最终到达https://example.com/页面。
    3. 此外:

      • 除了一些Xdebug触发选项之外,我的.htaccess不包含任何其他内容。
      • 我尝试将HTTPS规则移到WordPress规则下面:它们根本不会触发。
      • 我只移动some-page.* - > WordPress规则下的HTTP重定向:除了some-page.*的HTTPS访问之外没有任何效果(不会重定向到索引)。
      • 尝试切换HTTP / S规则:无效。

      所有指针都赞赏。

      编辑:

      我试图为此验证一些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_redirect301

      我尝试用http://htaccess.madewithlove.be/检查重写,并说重写(应该)按预期工作。

      编辑3:

      有些重写调试。一切正常,但由于某种原因,some-page.*应该重定向到非HTTPS,服务器值%{HTTPS}在所有重写尝试中都是off(即使加载页面时也是如此) HTTPS),基本上使规则无用。如果我删除HTTPS检查,我会得到一个重写循环(从HTTPS到HTTP,依此类推some-page.*个网址。)。

      SERVER_PORT重写条件相同的结果。所有请求似乎都是80

      何时适合检查连接端口/ HTTPS?

0 个答案:

没有答案