如何在 Jetty 9 中将永久(301)重定向从 HTTP 发送到 HTTPS

如何在 Jetty 9 中将永久(301)重定向从 HTTP 发送到 HTTPS

按照以下建议后如何让 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>

相关内容