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

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

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

关于如何可靠地实现这一目标的任何想法? 在此先感谢您的帮助。

您可以使用neezer发现的rack-reverse-proxy gem来执行此操作。 首先,您gem "rack-reverse-proxy", :require => "rack/reverse_proxy"在您的Gemfile中添加gem "rack-reverse-proxy", :require => "rack/reverse_proxy"并运行bundle install 。 接下来,您将修改config.ru以将/blog/ route转发到您想要的博客:

 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或图像问题。

我想说你最好的办法就是尝试使用Rack中间件(类似于Apache的mod_proxy )进行反向代理。

一个快速的谷歌搜索揭示了这个gem( https://github.com/jaswope/rack-reverse-proxy ),但作者提到它可能没有生产就绪。 拥有Rack中间件代理应该允许您将子域yourdomain.com/blog转发到另一个网站your-phpfog-account.com/wordpress-installation

据我所知,如果可以使用重写规则,则无法使用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/

除了jplewickeless’答案,我最终编写自定义Rack middelware来替换反向代理一侧的绝对URL和其他路径。 本指南将帮助您开始:

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