Как перенаправить на мобильную страницу на основе m.mysite.com в приложении grails
У меня есть приложение Grails, над которым я сейчас работаю. Я должен работать над мобильной версией веб-сайта и хочу узнать в UrlMappings.groovy, поступает ли запрос с сайта www.mysite.com или m.mysite.com. Любая идея, как я могу это сделать?
ОБНОВИТЬ:
Мои текущие сопоставления выглядят следующим образом --->
импортировать статический org.apache.commons.lang.StringUtils.*
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/$lang/$controller/$action?/$id?"{
language = "${lang}"
constraints {
// apply constraints here
}
}
// Start :: Shopping Tools internal URLs
"/modelLine/build/$year/$modelLineCode/"(controller:'modelLine', action:'build')
"/colors/index"(controller:'colors', action: 'index')
"/packages/index"(controller:'packages', action: 'index')
"/accessories/index"(controller:'accessories', action: 'index')
"/summary/index"(controller:'summary', action: 'index')
// Start :: Spanish :: Shopping Tools internal URLs
"/$lang/modelLine/build/$year/$modelLineCode/"(controller:'modelLine', action:'build')
"/$lang/colors/index"(controller:'colors', action: 'index')
"/$lang/packages/index"(controller:'packages', action: 'index')
"/$lang/accessories/index"(controller:'accessories', action: 'index')
"/$lang/summary/index"(controller:'summary', action: 'index')
// End :: Spanish :: Shopping Tools internal URLs
// End :: Shopping Tools internal URLs
// Default Home Page
"/$lang?"(controller:"modelLine", action:"index"){
constraints {
lang inList:['en','fr'] // avoids invalid matching
}
}
"/admin"(controller:"admin", action:"index")
// Error page definitions
"404"(controller:"errors", action:"notFound")
"500"(controller:"errors", action:"serverError")
"403"(view:'/login/denied')
"402"(view:'/login/denied')
"401"(view:'/login/denied')
}
}
Как я могу изменить их, чтобы обнаружить запрос m.mysite.com?
4 ответа
Вы можете создать фильтр или перехватчик в Grails 3 и проверить request.getHeader("Пользователь-агент"), если он мобильный, а затем перенаправить URL-адрес куда угодно.
Он находится в объекте запроса, доступном во всех действиях контроллера как request
,
Проверьте доступные свойства здесь https://grails.github.io/grails-doc/3.0.x/ref/Servlet%20API/request.html
Если у вас есть разные контроллеры для мобильного сайта, почему бы вам не изменить все ссылки в вашем m.mysite.com
для указанного мобильного сопоставления? За exampleController
и действие somethingMobile
в мобильном:
m.mysite.com/mobile/example/somethingMobile
то же самое для рабочего стола, но с действием something
:
mysite.com/example/something
Я решил это, изменив URL на уровне Apache. Поменял его на www.mysite.com/m