У меня есть приложение Rails на Heroku и отдельный блог WordPress, размещенный на GoDaddy. Как я могу маршрутизировать RailsApp.com/blog в WordPress, сохраняя его как подкаталог приложения?Сделать существующий блог WordPress подкаталогом приложения Rails?
3
A
ответ
3
Для Rails3.1 + (+ Rails4), вы должны выполнить следующие действия: Сначала добавьте gem rack-proxy в Gemfile
камень "стойку прокси"
Затем добавить файл proxy.rb в Rails.root/Lib, как это:
require 'rack/proxy'
class Proxy < Rack::Proxy
def initialize(app)
@app = app
end
def call(env)
original_host = env["HTTP_HOST"]
rewrite_env(env)
if env["HTTP_HOST"] != original_host
perform_request(env)
else
# just regular
@app.call(env)
end
end
def rewrite_env(env)
request = Rack::Request.new(env)
if request.path =~ /^\/blog(\/.*)$/
# enable these code if you set blog as ROOT directory in wordpress folder
# env['REQUEST_PATH'] = '/'
# env['ORIGINAL_FULLPATH'] = '/'
# env['PATH_INFO'] = '/' # set root path request
env['REQUEST_URI'] = 'http://tinle1201.wordpressdomain.com' # your path
env["SERVER_PORT"] = 80
env["HTTP_HOST"] = "tinle1201.wordpressdomain.com" # point to your host
end
env
end
end*
Регистрация прокси промежуточному в конфигурации/application.rb:
require File.expand_path('../boot', __FILE__)
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)
module AdultSavings
class Application < Rails::Application
config.autoload_paths += %W(#{config.root}/lib)
config.middleware.use "Proxy"
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
end
end*
Добавьте две строки в PHP файл WP-config.php: enter code here
define('WP_SITEURL', 'http://tinle1201.wordpressdomain.com/blog');
define('WP_HOME', 'http://tinle1201.wordpressdomain.com/blog');
0
Rails конфигурации
Добавить в Gemfile:
gem "rack-reverse-proxy", :require => "rack/reverse_proxy"
Теперь мы хотим/блог и/блог/должен быть направлен к экземпляру Wordpress из приложения Rails.
Добавьте это в config.ru прямо перед тем, как запустить приложение:
use Rack::ReverseProxy do
reverse_proxy(/^\/blog(\/.*)$/,
'http://CHANGEME.herokuapp.com$1',
opts = {:preserve_host => true})
end
В конфигурации/routes.rb добавить маршрут:
match "/blog" => redirect("/blog/")
Больше информации here
Я очень хорошо знаю эту статью, хотя она применима к wordpresses на основе герою. В настоящее время это часть моего попытки решения, и я могу заставить блог появиться в правильном подкаталоге, однако, когда вы нажимаете что-либо в блоге, он переключается на домен блога. – DogNibbler
В попытке решить эту проблему я изменил URL-адрес адреса сайта на wordpress на mywebsite.com/blog и добавил rewritebase/blog/.htaccess. Это отлично работает для готового WordPress, потому что сообщения организованы с расширениями, такими как /? P = 1, где это относится к первому сообщению. В сильно измененном блоге, с которым я пытаюсь работать, есть сообщения, организованные как blogurl.com/name-of-article, и по какой-то причине, когда я пытаюсь использовать то же точное решение, нажав на сообщения с главной страницы, я попал в корень моего сайт вместо посещения сообщений – DogNibbler
Обратите внимание, что «rack-reverse-proxy» не предназначен для производственных систем. Лучше использовать ваш веб-сервер (например, Nginx или Apache) для настройки параметров прокси-сервера в процессе производства. –