Сложная маршрутизация (несколько доменов, изменение пути): перевес, хороший вариант? - PullRequest
2 голосов
/ 06 мая 2011

У меня есть некоторые не очень простые проблемы проектирования маршрутизации с рельсами 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' и обезопасить все помощники пути, но я думаю, что это не лучшее решение для поддержки приложения в будущем.

Какие-нибудь решения?

1 Ответ

1 голос
/ 06 мая 2011

Я бы предложил настроить ваши маршруты для последовательного сопоставления всего с путем / LANG / ..., а затем использовать ваш веб-сервер для перезаписи 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 'и т. д.)

...