我正在尝试重写:
mysite.com/blog 至 blog.mysite.com
需要明确的是:我只希望用户看到 mysite.com/blog 。该博客实际上是一个单独托管的 WordPress 网站,位于 blog.mysite.com。 mysite.com 是一个 Rails 应用程序。
我尝试使用 rack-rewrite为了实现这一点,我可以使其与 301 重定向一起工作,但不能通过重写。
config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
#r301 '/blog', 'http://blog.mysite.com' #works
rewrite '/blog', 'http://blog.mysite.com' #fails
end
我尝试在 Rails 中而不是在网络服务器中执行此操作的原因是因为我使用 Heroku 进行托管,并且我相信不可能在 Heroku 上配置这种类型的重写。
所以我的问题很简单,我怎样才能实现这个重写?
附:我看到另一篇文章建议使用 rack-reverse-proxy但这颗 gem 看起来相当古老,似乎没有太多开发。这让我对使用它感到紧张。
最佳答案
在没有替代解决方案的情况下,我放弃了保留并使用了 rack-reverse-proxy gem 。正如其他一些帖子中所建议的(所以不允许我链接到此处)。
它对我来说工作得很好(Ruby 1.9.3,Rails 3.2.12)。
我的代码是:
use Rack::ReverseProxy do
reverse_proxy /^\/blog(\/.*)$/, 'http://blog.example.com$1', opts={:preserve_host => true} #works
end
位于 config.ru 文件的底部。
注意:在 WordPress 中,我还需要在“设置”>“常规”中更改站点 URL。我把它改为:http://example.com/blog但我保持 .htaccess 文件不变。
最后一点:我所有的 CSS 和 JS 都被正确引用,但我的本地字体却不然。我通过引用 Rails 应用程序的资源目录中的字体(而不是我的 Wordpress 主题中的字体)解决了这个问题。
关于ruby-on-rails - 在 Rails for Heroku 中将 URL 从子目录重写为子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846186/