【问题标题】:How to remove a URL's trailing slash in a Rails app? (in a SEO view)如何在 Rails 应用程序中删除 URL 的尾部斜杠? (在 SEO 视图中)
【发布时间】:2010-10-12 05:42:18
【问题描述】:

为了避免内容重复,我希望避免我网站的页面可以通过多个 URL 访问(带有或不带有斜杠)。

目前,网址

catalog/product/1

catalog/product/1/

指向同一页面。我的目标是第二个 URL 重定向到第一个(重定向 301,当然)。除了我的主页 / 显然之外,我网站的任何页面都不应使用尾部斜杠访问。

最好的方法是什么?使用 .htaccess 或 routes.rb?你会怎么做?

注意:我正在使用 Ruby on Rails 1.2.3 进行开发

【问题讨论】:

    标签: ruby-on-rails ruby seo url-rewriting


    【解决方案1】:

    您可以使用 http://github.com/jtrupiano/rack-rewrite 进行 url 重写以独立于网络服务器的差异。

    rails 应用中的示例用法:

    config.gem 'rack-rewrite', '~> 1.0.0'
    require 'rack/rewrite'
    config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
      r301 %r{(.+)/$}, '$1'
    end
    

    【讨论】:

    • 在 Rails 4 中,您需要将 Rack::Lock 替换为 Rack::Runtime(或其他),因为在 Rails 4 中默认启用的多线程 Rails 环境中不存在 Rack::Lock .
    • 当有查询参数时,这不会删除尾随/
    【解决方案2】:

    您可以使用 rack-rewrite gem 来做到这一点。方法如下:http://nanceskitchen.com/2010/05/19/seo-heroku-ruby-on-rails-and-removing-those-darn-trailing-slashes/

    【讨论】:

      【解决方案3】:

      我会使用Apache's mod_rewrite。试试这个:

      RewriteEngine on
      RewriteRule ^(.+)/$ $1 [R=301,L]
      

      编辑:添加了 R=301。我猜这与默认的 302 相比有 SEO 优势。

      【讨论】:

      • 感谢您的回答。我刚刚对其进行了测试并观察到了一个奇怪的行为:它重写了 URL 添加了页面的绝对路径!例如,如果我尝试访问mysite.com/test,它会重定向到mysite.com/home/mysite/public_html/test!你明白吗?
      • 嗯,您可能需要在 RewriteRule 行之前添加“RewriteBase /”。
      【解决方案4】:

      您无法使用 routes.rb 获得重定向。我想您可以构建一个仅发出重定向并将所有以“/”结尾的 URL 指向它的控制器,但这似乎不必要地复杂。相反,我会在 .htaccess 文件中使用 mod_rewrite:

      RewriteRule ^(.+)/$ $1 [R=301,L]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 2014-06-19
        相关资源
        最近更新 更多