当wordpress作为rails子目录托管时,无法登录到wp-admin

时间:2013-07-11 18:11:57

标签: ruby-on-rails wordpress heroku reverse-proxy

我在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设置似乎没有任何区别,无论它是真还是假。

想法?

2 个答案:

答案 0 :(得分: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网址,而不是主网站(rails)网址,对吗?我知道我的帖子在这一点上并不清楚。

答案 1 :(得分:0)

我终于将其跟踪到机架反向代理中的错误。 set-cookie标头以不正确的格式发送,因此浏览器只能正确解释第一个cookie。这恰好是wordpress测试cookie。所有其他(有用的)都被扔掉了,所以当然我无法登录。

我打算提交一个bug并分支到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