如果是 I18n,如何从根 URL 中删除参数

How to remove parameters from the root URL if it does I18n

已过时(至少 Google)

最近我研究了一下 SEO,发现搜索引擎在 URL 中以某种方式 "don't like" 参数。易于理解,因为它们不是真正的人类可读的或者往往不是永久的。


现在的问题是,如果我按照Rails Guides设置I18n然后想link到root_path怎么办?它 links 到根,但添加 ?locale=en 到 URL。所以 http://www.example.com/?locale=de.

即使 SEO 不再受此影响,我认为如果 URL 看起来像 http://www.example.com/en 而不是 http://www.example.com/?locale=en 看起来会更好。

我找到了一个非常简单的解决方案。

我刚刚向我的 routes.rb 添加了另一条名为 i18n_root 的路线。

示例:

Rails.application.routes.draw do
  root 'welcome#index'

  # ...

  get ':locale' => 'welcome#index', as: :i18n_root
end

现在我只需将 i18n_root_path 添加到 link 中,将 link 添加到根路径中,一切正常。

返回的URL:

http://www.example.com/en

另一个可能的解决方案,如果我已经在应用程序中有很多 link,那就是创建一个自定义根目录。

示例:

Rails.application.routes.draw do
  # root 'welcome#index'  <= We don't want to have a default root

  # ...

  get ':locale' => 'welcome#index', as: :root
end

希望这对其他人也有帮助。