не могу войти в wp-admin, когда wordpress размещен как подкаталог rails

У меня есть приложение rails на heroku, а также wordpress-heroku, установленное на heroku. Я использую гем rack-reverse-proxy для перенаправления моего wordpress в каталог / blog в моем приложении rails. Я выполнил все инструкции здесь:

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, но ни один из других файлов cookie WordPress не отображается в моем браузере.

Я пробовал много вещей, чтобы исправить это, включая использование обратного прокси-сервера для перенаправления всего трафика rails на wordpress, поэтому мне не нужно использовать подкаталог / blog в случае, если это вызывало проблему. Но получается точно такое же поведение. Я также определил, что параметр: preserve_host в конфигурации Rack :: ReverseProxy, похоже, не имеет никакого значения, истинно оно или ложно.

Идеи?


person megsolley    schedule 11.07.2013    source источник
comment
Похоже, у меня та же проблема, что и у этого парня: stackoverflow.com/questions/14220489/ Чтобы прояснить, я вижу wordpress-test -cookie устанавливается успешно, но другие файлы cookie не поступают из wordpress, когда я пытаюсь войти в систему.   -  person megsolley    schedule 11.07.2013
comment
ты нашел ответ?   -  person nicolas    schedule 12.09.2016


Ответы (2)


A) Что у вас в файле wp-config.php? Должно получиться примерно так:

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

Б) В настройках Rack :: ReverseProxy вы указываете URL-адрес блога (wordpress) herokuapp.com, а не URL-адрес основного сайта (рельсов), верно? Я понимаю, что мой пост не совсем ясен по этому поводу.

person ryw    schedule 11.07.2013

Я наконец отследил это до ошибки в обратном прокси-сервере. Заголовок set-cookie отправлялся в неправильном формате, поэтому браузер правильно интерпретировал только первый файл cookie. Это оказался тестовый файл cookie wordpress. Все остальные (полезные) выбрасывались, поэтому, конечно, я не мог войти в систему.

Я планирую отправить ошибку и перейти на обратный прокси-сервер, но тем временем я исправил ее с помощью этого патча на моем 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
person megsolley    schedule 12.07.2013