我正在尝试从 JSF 中实现 301 重定向,但是当我对其进行调试时,我总是看到正在执行 302。有人能告诉我如何改变下面的方法来完成 301 吗?
/**
* Redirect to specified destination url
*
* @param destination
*/
public static void permanentRedirect(String destination) {
final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
try {
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
if (!response.isCommitted()) {
externalContext.redirect(destination);
}
} catch (IOException e) {
LOGGER.debug("Could not redirect to " + destination);
}
}
最佳答案
你不应该调用 externalContext.redirect(destination)
.它会将状态覆盖为 302。您应该手动 set the Location
header和 complete the response .
externalContext.setResponseStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
externalContext.setResponseHeader("Location", destination);
facesContext.responseComplete();
关于JSF 2 -- 永久重定向 (301),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10744949/