如何使用子目录而不是子域?

时间:2011-05-30 17:59:44

标签: ruby-on-rails wordpress heroku subdomain subdirectory

我正在构建一个rails应用程序,我将在domain.com上的Heroku上托管。我想将WordPress用于phpfog上托管的博客,但我不想使用像blog.domain.com这样的子域名。我更喜欢使用像domain.com/blog

这样的子目录

它不是关于SEO ...我只是不喜欢子域名。子目录更性感(是的......我实际上是这么说的)。

有关如何可靠地完成此任务的任何想法?在此先感谢您的帮助。

4 个答案:

答案 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和其他路径。本指南将帮助您开始:

http://railscasts.com/episodes/151-rack-middleware