В настоящее время я работаю над фильтром в Grails, который позволит мне перенаправлять все входящие запросы на foo.org на одну и ту же подстраницу на foo.com.До сих пор я делал следующее:
if(!(""+request.requestURL).toLowerCase().startsWith(
grailsApplication.config.grails.serverURL ))
{redirect(url:"${grailsApplication.config.grails.serverURL}${request.requestURI}",params:params) }
К сожалению, у меня возникло несколько проблем с этим подходом:
- Значение request.requestURI, похоже, ведет себя не так, как ожидалось:вместо того, чтобы давать мне нормальный шаблон "/ [controller] / [action]", как я ожидал, он возвращает что-то вроде: "/grails/[controller]/[action].dispatch".- Есть ли альтернативный способ получения «нормального» URI?(извините, если это тривиально, но я не смог найти его в документации или испытать различные методы, доступные в объекте запроса)
- Параметры не передаются в вышеупомянутом перенаправлении.Вероятно, это связано с тем, что я использую параметр «url» в редиректе, который в соответствии с документами предполагается использовать для перенаправлений на абсолютные пути (что опять же заставляет его игнорировать раздел params?).Однако, поскольку я не смогу использовать обычный подход перенаправления (controller: ..., action: ...) при перенаправлении в другой домен, какой подход я мог бы использовать для правильной передачи параметров на подстраницу на foo.com?Рассматриваю решение, в котором я добавлю params вручную через закрытие params.each {}, но разве нет более элегантного решения для этого?
- 301 перенаправляет.Поскольку мои перенаправления носят постоянный характер, я хотел бы использовать код состояния 301.Я попытался установить «response.status = 301», но, кажется, игнорируется при использовании метода Grails redirect (...).Кроме того, на grails.org я вижу, что это, по-видимому, представлено в Grails 2.0, но есть ли способ получить это уже в Grails 1.3.7?