1

我在 heroku 上有一个 rails 应用程序,并且在 heroku 上也安装了一个 wordpress-heroku。我正在使用 rack-reverse-proxy gem 将我的 wordpress 重定向到我的 rails 应用程序上的 /blog 目录。我按照这里的所有说明进行操作:

http://rywalker.com/setting-up-a-wordpress-blog-on-heroku-as-a-subdirectory-of-a-rails-app-also-hosted-on-heroku

当我通过正常地址访问我的 wordpress 博客时,一切正常。但是,当我在我的 rails 应用程序的子目录下设置它时,我无法登录。我去 wp-login.php 我输入我的凭据,转发到 /blog/wp-admin.php,然后我立即被重定向回 /blog/wp-login.php?redirect_to=http%3A%2F%2Flocalhost%3A3000%2Fwp-admin%2F&reauth=1。唯一设置的 cookie 是 wordpress_test_cookie,但没有其他 wordpress cookie 出现在我的浏览器中。

我已经尝试了很多方法来解决这个问题,包括使用 rack-reverse-proxy 将所有rails 流量转发到 wordpress,所以我不必使用 /blog 子目录以防万一导致问题。但完全相同的行为结果。我还确定 Rack::ReverseProxy 配置中的 :preserve_host 设置无论是真还是假似乎都没有任何区别。

想法?

4

2 回答 2

0

我终于将其归结为 rack-reverse-proxy 中的一个错误。set-cookie 标头以不正确的格式发送,因此只有第一个 cookie 被浏览器正确解释。那恰好是 wordpress 测试 cookie。所有其他(有用的)都被扔掉了,所以我当然无法登录。

我计划向 rack-reverse-proxy 提交一个错误和分支,但同时我在我的 config.ru 中用这个补丁修复了它:

class MyReverseProxy < Rack::ReverseProxy
  private
  def create_response_headers(http_response)
    response_headers = super(http_response)
    if response_headers
      if response_headers["Set-Cookie"].is_a?(Array)
        response_headers["Set-Cookie"] = response_headers["Set-Cookie"].join("\n")
      end
    end
    response_headers
  end
end

# this is to make /blog show my wordpress blog
use MyReverseProxy do
    reverse_proxy_options :preserve_host => false
    reverse_proxy(/^\/blog(\/.*)$/, 'http://your-blog-server.com$1')
end
于 2013-07-12T05:39:00.223 回答
0

A) 你的 wp-config.php 中有什么?应该是这样的:

define('WP_SITEURL', 'http://www.DOMAIN.com/blog');
define('WP_HOME', 'http://www.DOMAIN.com/blog');

B) 在 Rack::ReverseProxy 设置中,您指向的是博客 (wordpress) herokuapp.com URL,而不是主站点 (rails) URL,对吗?我意识到我的帖子在这一点上并不清楚。

于 2013-07-11T20:09:15.123 回答