【问题标题】:How to properly configure DNS and Flexible SSL for Wordpress hosted on OpenShift through CloudFlare如何通过 CloudFlare 为 OpenShift 上托管的 Wordpress 正确配置 DNS 和灵活 SSL
【发布时间】:2016-04-20 10:51:53
【问题描述】:

TL;DR:我想在除管理员/登录之外的所有页面上将https 重定向到http,我希望发生完全相反的情况。我还希望将www 重定向到裸域名。 (更新:请查看更新 3 以获得答案)

从标题中可能很清楚,我在 OpenShift 上免费托管了一个 Wordpress 博客。我有一个从 GoDaddy 购买的自定义域。我正在使用 cloudflare,所以我可以使用免费的 SSL。

这是我的配置:

CloudFlare DNS:

CloudFlare 页面规则:

这是最有效的。我其实很想有这个规则:

*ghostlessmachine.com/* -> https://ghostlessmachine.com/$1

但我遇到了更多类似的问题,尽管根据this CloudFlare article,这似乎是我应该做的。实际上,最初我只想在管理页面中强制使用 SSL,但我什至不知道如何尝试。我想过使用两个页面规则,如下所示:

*ghostlessmachine.com/* -> http://ghostlessmachine.com/$2

*ghostlessmachine.com/wp-* -> http://ghostlessmachine.com/$2

但我没有运气。

这是我的 OpenShift 配置:

当我在地址栏中输入ghostlessmachine.com 时,它会正确地将我带到https:...。但是,我分享了一个链接 (https://ghost...),并且有人报告说无法访问它。我无法在本地复制。

当我尝试www.ghost... 时,我得到:

This webpage has a redirect loop

ERR_TOO_MANY_REDIRECTS

有人知道我做错了什么吗?我已经忘记尝试了多少种不同的配置,但似乎没有任何效果。

谢谢!

更新

好的,所以按照评论中的建议,我设法让情况好转了一些。对我来说,我最初链接到的文章没有完成工作,而另一个 SO 问题却完成了,这对我来说仍然是反直觉的。所以这就是我所做的改变:

  1. 从 OpenShift 中删除了 www.ghost... 别名。
  2. 将 CloudFlare 的 CNAME 记录从 www -> blabla.rhcloud.com 更改为 www -> ghostlessmachine.com
  3. 创建此页面规则:www.ghostlessmachine.com/* -> http://ghostlessmachine.com/$1

现在ghost...www.ghost... 都可以工作,并带我去http://ghost...。但是,如果我输入https://ghost...,它也可以工作,而无需将我重定向到简单的http。这是个问题。

我尝试改用此页面规则:

ghostlessmachine.com/ -> http://ghostlessmachine.com/$2

所以我得到了https://http://wwwwww,所有内容都重定向到了http://ghost...,但它不起作用。我无法再访问我的博客,无论我尝试什么地址,我都会得到 ERR_TOO_MANY_REDIRECTS。

更新 2

这是我在所有建议之后的完整设置:

htaccess:

wp-config.php:

CloufFlare:

结果:

  • https -> http 在非管理员/登录页面上:工作 ✓
  • 尝试访问管理/登录页面:ERR_TOO_MANY_REDIRECTS

更新 3

这成功了:

我仍然不明白为什么这行得通,而其余的却行不通。这基本上是一系列相当盲目的试验和错误,这里有 Allen 和 Simon in the CloudFlare support page 的一些输入。无论如何,现在我的所有要求都得到了尊重,谢谢!

【问题讨论】:

  • 我会以 ghostlessmachine.com CNAME wordpress-ghostlessmachine.rhcloud.comwww.ghostlessmachine.com CNAME ghostlessmachine.com 的方式配置 DNS 以防止重定向循环,如 answered here
  • 我按照您链接到的说明进行操作:更改了第二条 CNAME 记录 + 使用 www 删除了 OpenShift 别名。我没有创建任何页面规则。我希望这会使 ERR_TOO_MANY_REDIRECTS 消失,但要在 URL 中保留 www,或者获取 ERR_NAME_NOT_RESOLVED。相反,我不断收到 ERR_TOO_MANY_REDIRECTS。你明白为什么吗?我不知道。
  • 我添加了这个页面规则:www.ghostlessmachine.com/* -> http://ghostlessmachine.com/$1。我输入了地址并被重定向到https://www.ghostlessmachine.com/app。我不知道https/app 来自哪里!我仍然得到 ERR_TOO_MANY_REDIRECTS。
  • 糟糕,误报!我想我在测试之前没有等待足够的时间。它现在似乎正在工作!我现在只需让https 仅适用于管理页面。

标签: wordpress ssl dns openshift cloudflare


【解决方案1】:

确保在您的 wp-config.php 文件中遵循以下内容:

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

看这里:Force non-WWW but force https across all of wordpress & the entire domain

要将其他所有内容重定向到非 https,您可以在 wordpress 重写之前将以下内容添加到根 .htaccess 文件中:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/wp-admin.*
RewriteCond %{REQUEST_URI} !^/wp-login.*
RewriteCond %{HTTP_REFERER} !^https://.*
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

更新: CloudFlare 的 Page 规则有如下“页面规则优先级由它们在列表中的位置决定。如果多个规则匹配一个 URL,则顶部的规则优先级更高。”

让我们看看之前发生了什么:

  1. 请求https://www.ghostlessmachine.com/wp-admin打第一 规则,找到匹配,然后转到 http://www.ghostlessmachine.com/wp-admin!
  2. 现在是http://www.ghostlessmachine.com/wp-admin,第一条规则, 没有重写,归结为第三条规则,哎呀,它需要 goto https://www.ghostlessmachine.com/wp-admin!

循环是这样来的

【讨论】:

  • 但是当它不是管理页面时,我也想将 HTTPS 重定向到 HTTP。我该怎么做?
  • 在您的 .htaccess 中使用以下内容:RewriteCond %{HTTPS} =on RewriteCond %{REQUEST_URI} !^/wp-admin.* RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L]
  • 没用。并更正我之前所说的:我想对管理员和登录页面强制使用 HTTPS*。其余的都应该将 HTTPS 重定向到 HTTP。
  • @Ariel 您的帐户登录网址是什么?
  • 仍然无法正常工作 =/ 我想知道是否有什么原因导致 htaccess 规则没有生效……
猜你喜欢
  • 2014-12-21
  • 2017-09-24
  • 2014-10-09
  • 1970-01-01
  • 2014-12-07
  • 2016-04-24
  • 2014-12-02
  • 1970-01-01
  • 2015-09-17
相关资源
最近更新 更多