2

我正在尝试重写:

mysite.com/blogblog.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 上配置这种类型的重写。

所以我的问题很简单,我怎样才能实现这种重写?

ps 我看到另一个帖子建议使用rack-reverse-proxy,但是这个 gem 似乎很老,似乎没有太多的发展。这让我对使用它感到紧张。

4

2 回答 2

2

在没有替代解决方案的情况下,我搁置了保留并使用了rack-reverse-proxy gem。正如其他一些帖子中所建议的那样(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 中,我还需要在“设置”>“常规”中更改站点 URL。我将其更改为:http ://example.com/blog但我保持 .htaccess 文件不变。

最后一点:我所有的 CSS 和 JS 都被引用了,但我的本地字体没有。我通过引用我的 rails 应用程序的资产目录中的字体解决了这个问题(而不是在我的 Wordpress 主题中)。

于 2014-09-17T11:06:25.797 回答
1

听起来您的博客和您的网站托管在不同的地方。

仅当您想从不同的 URL 提供相同的 rails 页面时,重写才会起作用。它在不同主机之间不起作用: https ://github.com/jtrupiano/rack-rewrite#rewrite

最好的解决方案是让用户被重定向到子域。

其他几个不太理想的选择:

  • 在 Rails 应用程序中使用博客的 iFrame(这使得导航和书签变得困难)
  • 使用 rack-reverse-proxy 之类的东西从您的 Rails 应用程序中提供您的博客(这对用户来说会很慢,并且会减慢您网站的其余部分)。
  • 在 Rails 页面加载后通过 JavaScript 加载您的博客(SEO 不会很好,可能很难导航)

所以,我建议只使用子域。

于 2014-09-16T10:57:06.110 回答