Java中的URL重定向返回302而不是301。

10

我正在使用这段代码来重定向URL:

  response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
  response.sendRedirect(newURL);

从我看到的,重定向是正确的,但响应中返回的值是302而不是301。如何强制它变成301呢?

1个回答

25
如果您使用sendRedirect,它会将状态重置为302。您需要使用setHeader自行设置Location头部以使用301状态进行重定向。
示例代码:
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", "http://somewhere/");

从这个答案中提取: HttpServletResponse sendRedirect permanent

HttpServletResponse的sendRedirect方法是一个301重定向,需要注意的是,这不同于302临时重定向,因为301重定向会告诉浏览器将来所有对该URL的请求都应该跳转到新的URL。

我尝试添加以下内容:response.setHeader("Location", newUrl); response.setHeader("Connection", "close"); 但它没有起作用。 - Randomize
找到问题了:)现在它可以工作了,我忘记删除response.sendRedirect(newURL); 对不起,各位! - Randomize
哦,实际上sendRedirect接受相对URL并将其解析为绝对URL。明确设置Location - 正如您在此建议的那样 - 没有任何解析逻辑。有没有尽可能简单的方法可以从相对路径正确解决它? - JFK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接