按照以下建议后如何让 Jetty 将 http 重定向到 https,我们能够让独立的 Jetty 部署将所有 HTTP 请求重定向到 HTTPS。但是重定向是 302。我们如何才能将其改为 301(永久)重定向?
作为参考,我们将其添加到 Jetty 的 etc/webdefault.xml 中:
<web-app>
...
<security-constraint>
<web-resource-collection>
<web-resource-name>Everything in the webapp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
答案1
我们通过在 war 旁边添加一个 redirector.xml 文件来获得所需的行为。该文件的内容如下。请注意,这还会将 example.com 重定向到 www.example.com:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.server.handler.MovedContextHandler">
<Set name="contextPath">/</Set>
<Set name="newContextURL">https://www.example.com</Set>
<Set name="permanent">true</Set>
<Set name="discardPathInfo">false</Set>
<Set name="discardQuery">false</Set>
<Set name="virtualHosts">
<Array type="String">
<Item>example.com</Item>
</Array>
</Set>
</Configure>