我正在构建一个rails应用程序,我将在domain.com上的Heroku上托管。我想将WordPress用于phpfog上托管的博客,但我不想使用像blog.domain.com这样的子域名。我更喜欢使用像domain.com/blog
这样的子目录它不是关于SEO ...我只是不喜欢子域名。子目录更性感(是的......我实际上是这么说的)。
有关如何可靠地完成此任务的任何想法?在此先感谢您的帮助。
答案 0 :(得分:18)
您可以使用neezer发现的rack-reverse-proxy gem来执行此操作。首先,您需要将gem "rack-reverse-proxy", :require => "rack/reverse_proxy"
添加到Gemfile并运行bundle install
。接下来,您将修改config.ru
以将/blog/
路由转发到您想要的博客:
require ::File.expand_path('../config/environment', __FILE__)
use Rack::ReverseProxy do
reverse_proxy /^\/blog(\/.*)$/, 'http://notch.tumblr.com$1', opts={:preserve_host => true}
end
run YourAppName::Application
您可能已经拥有第一个require语句和run YourAppName...
语句。有一些重要的细节使这项工作。
首先,当您添加所需的博客URL时,您无法在其上保留尾随斜杠。如果你这样做,当有人请求http://yourdomain.com/blog/
时,gem会将它们转发到http://you.yourbloghost.com//
,并带有额外的斜杠。
其次,如果未启用:preserve_host
选项,您的博客托管服务器会将请求视为http://yourdomain.com/blog/
而不是http://you.yourbloghost.com
,并且会返回错误结果。
如果博客使用/absolute/paths/to/images/
,您仍可能会遇到CSS或图片问题。
答案 1 :(得分:3)
我认为最好的办法是尝试使用Rack中间件(类似于Apache的mod_proxy
)进行反向代理。
谷歌的快速搜索显示了这个宝石(https://github.com/jaswope/rack-reverse-proxy),但作者提到它可能没有生产就绪。拥有Rack中间件代理应该允许您将子域yourdomain.com/blog
转发到另一个网站your-phpfog-account.com/wordpress-installation
。
答案 2 :(得分:1)
据我所知,如果可以使用重写规则,则无法使用heroku访问Apache配置文件。
如果您选择不使用heroku,您可以随时执行我在下面详细说明的内容。但是,如果您不使用heroku,您可以轻松地将wordpress提取到/ public / rails文件夹,并再次使用重写规则得到apache来处理博客请求。
在您的apache配置中,您需要添加。
RewriteRule ^/blog/?(.*)$ http://somedomain.com/~user/blog/$1 [P,NC,QSA,L]
它会将所有请求重定向到/ blog /到其他服务器。
来源:http://www.igvita.com/2007/07/04/integrating-wordpress-and-rails/
答案 3 :(得分:0)
除了jplewickeless'答案之外,我最终编写了自定义Rack middelware来替换反向代理一侧的绝对URL和其他路径。本指南将帮助您开始: