我对 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'等开头的请求路径。