Перезапись URL с помощью OcpSoft переписать правило Join.path
Я использую Ocpsoft Rewrite, чтобы выполнить перезапись URL в проекте JSF. У меня есть правило перенаправления, которое отлично работает:
.addRule()
.when(Direction.isInbound().and(Path.matches("/venue/{id}")))
.perform(Redirect.temporary(context.getContextPath() +
"/protected/index.xhtml?venueID={id}"));
Однако из-за перенаправления это приводит к изменению URL-адреса на панели навигации. Я думал, что вместо этого мог бы использовать правило Join, но оно не работает так, как я ожидал:
.addRule(Join.path("/venue/{venueID}").to("/protected/index.xhtml"))
.perform(Log.message(Level.INFO, "Rewrite is active!"));
Я думал, что это правило будет перенаправлять, например, с foo/venue/123
в foo/protected/index.xhtml?venueID=123
но я не понимаю ?venueID=...
параметр добавляется к URL.
Кто-нибудь знает, как должно выглядеть правильное правило?
2 ответа
Ваше правило выглядит правильно. Но объединение не приводит к перенаправлению. Вместо этого он перенаправляет запрос внутренне. Это означает, что URL не изменился. Таким образом, вы не будете "видеть" параметр venueID
в URL. Но вы сможете прочитать параметр, используя стандартный API сервлетов:
String id = HttpServletRequest.getParameter("venueID");
Если вы действительно хотите, вы можете сделать Forward
вместо:
.addRule()
.when(Direction.isInbound().and(Path.matches("/venue/{id}")))
.perform(Forward.to("/protected/index.xhtml?venueID={id}"));
Но это не будет обрабатывать исходящие ссылки HTML, как Join!