[英]Rails root_url has two forward slashes when default_url_options trailing_slash is true
[英]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.