繁体   English   中英

在Rails for Heroku中将URL从子目录重写为子域

[英]Rewrite URL from Subdirectory to Subdomain in Rails for Heroku

我正在尝试重写:

mysite.com/blogblog.mysite.com

需要说明的是:我只希望用户看到mysite.com/blog 。该博客实际上是位于blog.mysite.com上的单独托管的wordpress网站。 而且mysite.com是Rails应用程序。

我尝试使用机架重写来实现此目的,并且可以使其与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上配置这种重写类型。

所以我的问题很简单,我如何实现这种重写?

ps:我看到另一篇文章建议使用机架反向代理,但是这个宝石看起来很老,而且似乎没有太大的发展。 这让我不敢使用它。

在没有其他解决方案的情况下,我搁置了保留意见,并使用了机架反向代理宝石。 正如其他一些帖子所建议的(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都被引用为OK,但我的本地字体却未被引用。 我通过引用Rails应用程序资产目录中的字体(而不是在Wordpress主题中)来解决此问题。

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

仅当您要提供相同的rails页面但使用不同的URL时,重写才有效。 它不能在不同的主机之间工作: https : //github.com/jtrupiano/rack-rewrite#rewrite

最好的解决方案是将用户重定向到子域即可。

其他一些不太理想的选择:

  • 在Rails应用程序中使用博客的iFrame(这使导航和添加书签变得困难)
  • 使用rails-reverse-proxy之类的东西从rails应用程序为您的博客提供服务(这对用户而言会很慢,而对网站的其余部分也会影响速度)。
  • 在Rails页面加载后通过JavaScript加载博客(SEO不好,可能很难导航)

因此,我建议仅使用子域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM