如何通过CloudFlare为OpenShift上托管的Wordpress正确配置DNS和灵活SSL

时间:2016-01-14 22:28:17

标签: wordpress ssl dns openshift cloudflare

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

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

这是我的配置:

CloudFlare DNS:

CloudFlare DNS

CloudFlare页面规则:

CloudFlare Page Rules

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

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

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

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

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

但我没有运气。

这是我的OpenShift配置:

OpenShift aliases

当我在地址栏中写下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
  4. 现在,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的:

    enter image description here

    WP-config.php中:

    enter image description here

    CloufFlare:

    enter image description here

    结果:

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

    enter image description here

    更新3

    这就是诀窍:

    enter image description here

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

1 个答案:

答案 0 :(得分:0)

确保在你的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的页面规则具有以下&#34;页面规则优先级由它们在列表中的位置决定。如果多个规则与URL匹配,则顶部的规则具有更高的优先级。 &#34;

让我们看看之前发生的事情:

  1. 请求https://www.ghostlessmachine.com/wp-admin点击第一个 规则,匹配发现,然后它去 http://www.ghostlessmachine.com/wp-admin <!/ LI>
  2. 现在来http://www.ghostlessmachine.com/wp-admin,第一条规则, 没有重写,归结为第3条规则,哎呀,它需要转到 https://www.ghostlessmachine.com/wp-admin <!/ LI>

    这是循环的来源