我试图改写:
mysite.com/blog 转到 blog.mysite.com
要明确:我只希望用户看到 mysite.com/blog 。博客实际上是blog.mysite.com上单独托管的wordpress网站。而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中而不是在Web服务器中执行此操作的原因是因为我使用Heroku进行托管,我相信不可能在Heroku上配置这种类型的重写。
所以我的问题很简单,我怎样才能实现这种重写?
P.S。我看到另一篇文章建议使用rack-reverse-proxy,但这个宝石看起来很古老,似乎没有太大的发展。这使我对使用它感到紧张。
答案 0 :(得分:2)
在没有替代解决方案的情况下,我放弃了我的预订并使用了rack-reverse-proxy宝石。正如其他一些帖子所建议的那样(SO不允许我链接到这里)。
它对我来说很好(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中,我还需要更改设置中的网站网址>一般。我将其更改为:http://example.com/blog但我保持.htaccess文件不变。
最后一点:我所有的CSS和JS都被引用了,但是我的本地字体不是。我通过引用rails应用程序的assets目录中的字体解决了这个问题(而不是我的Wordpress主题)。
答案 1 :(得分:1)
听起来您的博客和您的网站托管在不同的地方。
重写仅在您想要提供相同的rails页面但来自不同的URL时才有效。它不适用于不同的主机: https://github.com/jtrupiano/rack-rewrite#rewrite
最好的解决方案是将用户重定向到子域名。
其他一些不太理想的选择:
所以,我建议只使用子域名。