我的网站的网址类似于' 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映射必须提供 要映射到的控制器或视图名称!
知道怎么做到这一点?映射如下。
谢谢! 杰森
静态映射= {
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
}
答案 0 :(得分:1)
老实说,就像DmitryB所说,最好的办法是通过网络服务器,无论是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
}
}
}
}
}
这应该可以解决问题。