4

我有一个在 Heroku 上运行的 rails 应用程序,我正在尝试在 /blog 上为我的域设置一个 Wordpress 博客,以用于 SEO 目的。我在我的 Rails 应用程序中设置了 Rack::ReverseProxy 指向博客的子域,并设置了 Wordpress 端的所有配置,以便所有 css 和链接都能正常工作。我遇到的问题是,当我转到 /blog/wp-admin 时,我被重定向到 /blog/wp-login?redirect_to={blog's subdomain}&reauth=1,在尝试登录后我被发送到同一页。

我注意到即使为正确的域设置了 Wordpress 的测试 Cookie,我也没有为登录而设置 cookie。我什至在 wp_set_auth_cookie 中的 wp-includes/pluggable.php 中跟踪它,它在成功登录后实际设置 cookie,对 setcookie 的调用返回 true,但在 cookie 未添加到我的会话之后立即(即使测试 Cookie 确实在标头中成功通过)

我看那里是不是走错了方向?是否有任何设置我应该调查才能以这种方式登录?

4

2 回答 2

2

我遇到了这个确切的问题,我最终将其归结为 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-11T23:28:31.907 回答
0

我没有答案,但我有一些建议可以更好地了解正在发生的事情。

如果您使用的是 Google Chrome,请打开开发者工具的网络面板并观察登录时发生的情况。

检查为哪个域设置 cookie,当您查看处理登录的 POST 请求的响应标头时,您应该看到 Set-Cookie 标头,检查该域是 .domain.com 还是 blog .domain.com 并查看该请求是否试图将您转发到其他地方。

另一种可能性是您的 Wordpress 安装配置可能与您想要的不同,例如站点 URL 是 www.domain.com/blog 而不是 blog.domain.com

您是否可以访问 blog.domain.com/wp-admin/ 的登录页面?

于 2013-01-25T05:24:18.790 回答