轨道上的红宝石 - 复杂路由(多个域,更改路径):覆盖,一个不错的选择



我对 rails 3 有一些不那么容易的路由设计问题。

我们有一个翻译成多种语言的网站。其中一些语言具有完整的域支持,例如:

example.com -> english
example.es -> spanish
example.fr -> french
exemple.de -> german
... (lot more)

但我们也有:

example.com/zh-hans -> chinese
example.com/ru -> russian
... (lot more)

我知道约束功能(与request.host匹配)但是在弄清楚如何使路由系统与两种类型的URL很好地配合时遇到了很多问题。

一旦我们有两种不同类型的请求,一切都崩溃了:

host:example.es path:/everything-else
host:example.com path:/LANG/everything-else

我想出的唯一解决方案是捕获所有路由match '*' => 'website#routing'并修补所有路径助手,但我想这不是将来维护应用程序的最佳选择。

有什么解决方案吗?

我建议设置路由以始终将所有内容映射到路径/LANG/...,然后使用您的 Web 服务器重写特定于语言的域的 URL。例如,对于 Apache,您可以使用这样的东西:

    RewriteEngine On
    RewriteCond %{SERVER_NAME} example.de
    RewriteCond %{REQUEST_URI} !^/de
    RewriteRule ^.*$     http://%{SERVER_NAME}/de%{REQUEST_URI} [R]
    RewriteCond %{SERVER_NAME} example.es
    RewriteCond %{REQUEST_URI} !^/es
    RewriteRule ^.*$     http://%{SERVER_NAME}/es%{REQUEST_URI} [R]
    # etc.

(我不确定 RewriteCond 是否真的正确 - 它应该说"每个不以'/de'、'/es'等开头的请求路径。

相关内容

  • 没有找到相关文章

最新更新