grails - Grails URLMappings中的逻辑 block

标签 grails groovy urlmappings.groovy

我的网站具有类似“http://someRandomUsername.mysite.com”的网址。
有时用户会尝试使用以下网址
“http://www.someRandomeUsername.mysite.com”。我想要一些
网址映射中的逻辑可解决此问题。
使用以下映射,当我点击该页面时,无论是否有
不需要的www,我得到:

2012-03-01 14:52:16,014 [http-8080-5]错误[localhost]。[/ ambit]-
装饰页面时发生未处理的异常
java.lang.IllegalArgumentException:URL映射必须提供一个
Controller 或 View 名称以映射到!

任何想法如何做到这一点?映射如下。

谢谢!
杰森

静态映射= {

         name publicMap: "/$action?/$id?" {
                 def ret = UrlMappings.check(request)
                 controller = ret.controller
                 userName = ret.userName
         }
}

static check =
{ request ->
         def tokens = request?.serverName?.split(/\./) as List ?: []
         def ret = [controller:'info']
         if(tokens.size() > 3 && token[0] == 'www')
         {
                 ret.userName = tokens[1]
                 ret.controller = 'redirect'
                 ret.action = 'removeWWW'
         }
         else if(tokens.size() == 3)
         {
                 ret.userName = tokens[0]
                 ret.controller = 'info'
         }

         return ret
}

最佳答案

老实说,就像DmitryB所说的那样,最好的方法是通过Web服务器,无论是IIS,Apache还是Tomcat。

话虽如此,我认为在Grails中实现此目标的最佳方法是使用过滤器。
您可以在〜/ conf目录中创建如下内容:

public class StripFilters {
  def filters = {
    stripWWWFilter(controller: '*', action: '*') {
      before = {
        def tokens = request.serverName.tokenize(/\./) ?: []

        if(tokens.size() > 3 && tokens[0] == 'www') {
          def url = request.request.requestURL.toString().replace('www.', '')
          redirect([url:url, params: [userName: tokens[1]], permanent: true])
          return false
        }
      }
    }
  }
}

这应该可以解决问题。

关于grails - Grails URLMappings中的逻辑 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525194/

相关文章:

java - 构建 java 项目时 build.gradle 中的 Groovy 语法

javascript - Grails Controller 的值打破了gsp中的javascript

ant - 如何为 Ant 构建提供 Gradle 依赖项

Jenkins 文件 : Define and assign values to several variables at once seems not to be implemented

grails - 从网址映射永久重定向而参数不起作用,grails

grails - 如何在UrlMappings.groovy中的Url模式中转义#号?

grails - 从Grails 2.2.2升级到2.5.1时出现编译问题

grails - Spring Security URL 映射 Grails

servlets - 阻止Grails阅读我的请求