如何使用子目录而不是子域?
我正在构建一个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和其他路径。 本指南将帮助您开始: