我想基于请求客户端的区域设置 - 重定向Jetty中的URL,服务器端。
即。
我认为这就像运行我的Jetty服务器的服务器端代码一样简单: -
String i18nID = Locale.getDefault().getCountry();
RewriteHandler rewrite = new RewriteHandler();
rewrite.setRewriteRequestURI(true);
rewrite.setRewritePathInfo(false);
rewrite.setOriginalPathAttribute("requestedPath");
RedirectRegexRule r = new RedirectRegexRule();
r.setRegex("/help/(.*)");
r.setReplacement("/help_" + i18nID + "/$1");
rewrite.addRule(r);
server.setHandler(rewrite);
但这不起作用,我为所有'host:port / *'地址获得404s。然后我注意到我无论如何都得到了语言环境服务器端,我想要客户端,所以我编写了自己的处理程序: -
private class MyHandler extends RewriteHandler
{
@Override
public void handle(String target,
Request baseRequest,
HttpServletRequest request,
HttpServletResponse response)
{
try
{
String country = baseRequest.getLocale().getCountry();
String newTarget = target.replace("/help/", "/help_" + country + "/");
if (target.contains("/help/") /*TODO And not GB locale */)
{
response.sendRedirect(newTarget);
}
else
{
super.handle(target, baseRequest, request, response);
}
}
catch(Exception e)
{
/*DEBUG*/System.out.println(e.getClass() + ": " + e.getMessage());
e.printStackTrace();
}
}
}
...并使用它而不是RewriteHandler。这接受'/ help /'请求,不重定向,不包含一些页面元素和404s,其他URI不包含帮助。
我做错了什么或使用重写/重定向处理程序某种方式它们不应该被使用?!