我想基本上在 UrlMappings.groovy 中进行 URL 重写,例如:
"/pub/cdn/$version/**"(uri: request.forwardURI.replaceFirst("/pub/cdn/[0-9]*", ""))
因此请求:
/pub/cdn/1327516405188/css/login.css
例如,将被翻译为:
/css/login.css
这个想法是获取原始 URI 并去除一些路径,然后传递新的 URI。
但是,使用上面的代码,我得到了错误:
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'grailsUrlMappingsHolder': Cannot resolve
> reference to bean 'urlMappingsTargetSource' while setting bean
> property 'targetSource'; nested exception is
> ...
> groovy.lang.MissingPropertyException: No such property: forwardURI for
> class: java.lang.String
这似乎暗示请求对象是一个字符串。有没有办法在 UrlMappings.groovy 中获取原始 URI?
只要新路径是硬编码的,“/old/path”(uri:“/new/path”)方法就可以工作,但我无法弄清楚如何将原始请求的路径作为 UrlMappings 中的变量访问班级。
PS 我尝试让 UrlMappings 调用控制器:
"/pub/cdn/$version/**" {
controller = "image"
action = "cdnRedirect"
}
在控制器中:
def cdnRedirect = {
def newUri = request.forwardURI?.toString().replaceFirst("/pub/cdn/[0-9]*", "")
return redirect(uri: newUri)
}
虽然控制器闭包被正确调用,并且 URI 被正确翻译,但重定向似乎根本没有做任何事情。