繁体   English   中英

在Rails中对已安装的引擎强制执行URL尾部斜杠

[英]Enforcing URL trailing slashes for mounted engines in Rails

我有一个称为Battalion的引擎安装到我的主机应用程序中,如下所示:

mount Battalion::Engine => '/@:site_username'

从概念上讲, Battalion引擎是不同于主机应用程序的网站。 它具有单独的资产,等等。我遇到的问题与斜杠有关。 当我访问路由http://localhost:3000/@jon我想重定向到相同的路由,但带有斜杠,例如http://localhost:3000/@jon/

这很重要,因为一旦用户进入引擎,我就想使用相对URL作为资产。

我知道可以应用于链接帮助程序的trailing_slash选项,但是我想在控制器级别而不是对每个链接都强制执行重定向。 我还读了一篇博客文章 ,提供了一个很好的解决方案,但是由于我在路由中使用了:site_username变量,因此这种情况在我的特殊情况下会中断。

原来来处理,这是在找到了答案稍加改进的最佳途径这一职位 在这种情况下,他的建议不太适用,因为引擎的URL中嵌入了一个参数。 这是我找到的解决方案:

在引擎的application_controller.rb中:

def ensure_trailing_slash
  redirect_to url_for(params = :trailing_slash => true), :status => 301 unless trailing_slash?
end

def trailing_slash?
  request.env['REQUEST_URI'].match(/[^\?]+/).to_s.last == '/'
end

在包含根路径的控制器中:

before_filter :ensure_trailing_slash, :only => :index

暂无
暂无

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

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