2013-09-22 4 views
0

Я работаю над приложением Grails 2.2.3. Это приложение имеет бэкэнд, маркетинговый сайт и некоторые пользовательские страницы.Grails urlmappings: Возможны разные ответы для субдомена и домена root «/»?

Каждая пользовательская страница должна быть доступна через username.domain.tld, сайт маркетинга через domain.tld и www.domain.tld и бэкенд по домену.tld/backend OR backend.domain.tld.

Я уже реализовал каждую из этих частей, но моя проблема в том, что у меня есть только одно URLMapping для "/". Если я назову маркетинговый сайт, я получаю маркетинговое представление в качестве ответа. Если я вызываю username.domain.tld, я также получаю маркетинговый сайт как ответ, но я хочу, чтобы я получил/user/page в качестве ответа. Используя username.domain.tld/user/page, я получаю правильный ответ для данного пользователя (у меня есть фильтр, который проверяет заголовок http для имени домена и устанавливает имя поддомена в params.username).

Что мне нужно сделать, чтобы получить пользовательские страницы под «/» поддомена пользовательской страницы? Нужно ли мне разделить мое приложение на разные приложения (архитектура плагинов)? Должен ли я делать что-то подобное? http://techsravi.blogspot.de/2011/05/managing-multiple-domain-and-sub-domain.html Или мне нужно выполнить переписывание url с помощью Apache2?

Какое лучшее и чистое решение для моей проблемы?

+0

Возможный дубликат [Grails and Subdomains] (http://stackoverflow.com/questions/9242527/grails-and-subdomains) – Ramsharan

ответ

1

Одним из решений было бы использовать конфигурацию Apache с ProxyPass и ProxyPassReverse для «перенаправления» некоторого URL-адреса другому в tomcat, смешивая его с различными VirtualHosts.

<VirtualHost *:80> 
    ServerName username.domain.tld 
    ProxyPass/http://mycomputer:8080/user 
    ProxyPassReverse/http://mycomputer:8080/user 
</VirtualHost> 
<VirtualHost *:80> 
    ServerName www.domain.tld 
    ProxyPass/http://mycomputer:8080/ 
    ProxyPassReverse/http://mycomputer:8080/ 
</VirtualHost> 
<VirtualHost *:80> 
    ServerName backend.domain.tld 
    ProxyPass/http://mycomputer:8080/backend 
    ProxyPassReverse/http://mycomputer:8080/backend 
</VirtualHost> 

Я не проверял это точно, но и в других подобных случаях, это работает, и мы используем его много здесь ...

+0

Привет Эйлен, проблема в том, что генерации urils генерируются всегда на основе имени serverName и покажите действие и контроллер (я не хочу). Есть ли возможность также изменить или изменить каждый атрибут href a-tag в html на новый URL-адрес поддомена? Например: В Grails у меня есть domain.tld/page/username в html-контенте, но в поле url для браузеров написано имя пользователя.domain.tld. Я хочу, чтобы ссылки в html-содержимом также менялись, потому что мне также нужны чистые ссылки для google и т. Д. – whitenexx

+0

ммм, это сложнее, я думаю. Я полагаю, что вы могли бы управлять им с помощью Apache mod_rewrite или аналогичного (но я не очень хорош в этом, просто некоторые примеры копирования и вставки ...) или, как вы сказали, отделите их в разных приложениях grails, каждый из которых имеет свои собственные имя... – Eylen

0

Я нашел этот ответ Grails and Subdomains, который может решить проблему, которую вы имели.

У этого есть решение для поддомена, которое требуется для вас для каждого имени пользователя. Для этого он использовал фильтр.

Другое сообщение http://fbflex.wordpress.com/2011/08/23/custom-theming-grails-applications/ также похоже на такое решение, которое использовало различные подходы для решения своих проблем. И один из них - использовать фильтр.