301-Redirect

如何在 Jetty 9 中發送從 HTTP 到 HTTPS 的永久(301)重定向

  • March 18, 2016

在遵循有關如何讓 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>

通過在戰爭旁邊添加一個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>

引用自:https://serverfault.com/questions/761288