Я бы хотел переписать URL в UrlMappings.groovy, например:
"/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
, что, по-видимому, означает, что объект запроса является строкой. Есть ли способ получить оригинальный URI в UrlMappings.groovy?
Метод "/ old / path" (uri: "/ new / path") работает до тех пор, пока новый путь жестко запрограммирован, но я не могу понять, как получить доступ к исходному запрошенному пути в качестве переменной внутри класса UrlMappings.
P.S. Я пытался заставить 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 переводится правильно, перенаправление, похоже, ничего не делает.