How to redirect to mobile page based on m.mysite.com in grails app

前提是你 提交于 2019-12-04 05:46:30

问题


I have a grails app I am working on at my current job. I have to work on the mobile version of the website and I want to catch in UrlMappings.groovy whether the request is coming from www.mysite.com or m.mysite.com. Any idea how can i do that?

UPDATE:

My current mappings look like this --->

import static 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')
    }
}

How do I change them to detect an m.mysite.com request?


回答1:


If you have different controllers for mobile site, why don't you change all links in your m.mysite.com for specified mobile mapping? For exampleController and action somethingMobile in mobile:

m.mysite.com/mobile/example/somethingMobile

the same for desktop but with action something:

mysite.com/example/something



回答2:


It's in the request object, available in all controller actions as request.

Check the available properties here https://grails.github.io/grails-doc/3.0.x/ref/Servlet%20API/request.html




回答3:


You can create a filter or Interceptor in Grails 3 and check request.getHeader("User-Agent") if it is mobile then redirect the url where ever you want.




回答4:


I solved this by changing the url at the apache level. Changed it to www.mysite.com/m



来源:https://stackoverflow.com/questions/35637486/how-to-redirect-to-mobile-page-based-on-m-mysite-com-in-grails-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!