Rails子文件夹中的Wordpress:如何设置博客根路径?

时间:2017-12-06 10:05:05

标签: ruby-on-rails wordpress .htaccess url-routing reverse-proxy

受到来自 Paul Arterburn that great article的启发,并受到我的客户搜索引擎优化需求的推动,我已经设置了由WPEngine托管的Wordpress博客,以便在Ruby的子目录中工作由Heroku托管的on-Rails应用。

问题描述

问题是相对网址与博客网址不匹配。例如,当我创建<a href="/">Should be https://www.example.com/blog/</a>之类的链接时,网页会将链接显示为https://www.example.com。不酷。

奇怪的是,其余的链接似乎没问题。

其他一些东西可以帮助解决这个问题。我们正在使用扩展程序AMPforWP。当我们将/amp添加到帖子网址时,例如 https://www.example.com/blog/some-category/my-great-post/amp就会变为https://example.wpengine.com/blog/some-category/my-great-post/amp

最终,如果我停用AMPforWP扩展名,无法访问URL(但是博客主页),则服务器返回500错误。即使我再次激活AMPforWP。

这是我到目前为止所做的事情

的Ruby-on-Rails的

/config/routes.rb

get '/blog' => redirect("https://www.example.com/blog/")

/config.ru

# https://github.com/waterlink/rack-reverse-proxy
use Rack::ReverseProxy do
  reverse_proxy /^\/blog(\/.*)$/, 'http://example.wpengine.com$1', :username => 'example', :password => 'fakepwd', :timeout => 500, :preserve_host => true
end

WPEngine admin

https://my.wpengine.com/installs/example/domains

WPEngine domains configuration for example blog

Wordpress管理员

https://www.example.com/blog/wp-admin/options-general.php

enter image description here

.htaccess配置

的.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
# BEGIN wtfdivi

# END wtfdivi

我被卡住了......: - (

可以非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

我知道这个问题已经有一段时间了。我有相同的设置,但我有一个Rails应用程序将WordPress博客指向为“文件夹url”,而不是子域。这是我解决的方法。

首先,在反向代理服务器上,我必须禁用preserve_host,以便它将域保留在请求中,而不会干扰我的规则。

config.middleware.insert(0, Rack::ReverseProxy) do
  reverse_proxy_options preserve_host: false
  reverse_proxy %r{^\/blog(\/.*)$}, "#{Rails.application.config.blog_url}$1"
end

然后在我的Wordpress上,将安装移至子文件夹(名为blog)而不是根文件夹,并按如下所示使用了.htaccess的大多数默认配置:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

希望它仍然可以提供帮助。