首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Tomcat/Java 實作 301 永久重導向:整合 UrlRewriteFilter 實現 SEO 友善網域轉址

     編輯:Java 相關知識

在 Java Web 應用中實作 HTTP 301 永久重導向,對於 SEO 至關重要。Tomcat 本身不直接提供重導向規則引擎,業界標準做法是整合 UrlRewriteFilter,透過 XML 規則靈活控制網域轉址、路徑重寫等。本文說明如何設定將非 www 網域永久導向 www 版本,並排除本地開發環境。

核心概念

  • 301 Permanent Redirect:告知搜尋引擎網址永久遷移,權重傳遞給新網址。
  • UrlRewriteFilter:Java 標準 Filter 實作,支援正則比對、條件判斷、重導向類型等豐富功能。
  • Condition 判斷邏輯:operator="notequal" 表示「不等於」,配合 host 條件檢查請求的 Host 標頭。

urlrewrite.xml 設定範例

方案一:單一網域強制導向 www

<urlrewrite>
    <rule>
        <name>SEO redirect</name>
        <condition name="host" operator="notequal">^www\.jb51\.net</condition>
        <from>^/(.*)</from>
        <to type="permanent-redirect" last="true">https://www.jb51.net/$1</to>
    </rule>
</urlrewrite>

方案二:排除 localhost 開發環境

<urlrewrite>
    <rule>
        <name>SEO redirect</name>
        <condition name="host" operator="notequal">^www\.jb51\.net</condition>
        <condition name="host" operator="notequal">^localhost</condition>
        <from>^/(.*)</from>
        <to type="permanent-redirect" last="true">https://www.jb51.net/$1</to>
    </rule>
</urlrewrite>

關鍵屬性解析

屬性說明
type="permanent-redirect"發送 HTTP 301 狀態碼,瀏覽器與搜尋引擎會快取此導向
last="true"規則匹配後停止處理後續規則
$1反向引用 from 中 (.*) 捕獲的路徑部分
^www\.jb51\.net正則錨點 ^ 確保完整匹配,點號需跳脫

部署步驟

  1. 將 urlrewritefilter-.jar 放入 WEB-INF/lib
  2. 在 web.xml 註冊 Filter:
    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
  3. 將 urlrewrite.xml 放入 WEB-INF 目錄
  4. 重啟應用驗證

進階應用場景

  • HTTP 強制導向 HTTPS
  • 舊版網址結構遷移至新結構
  • 多語系網址重寫(如 /en/ → ?lang=en)
  • 靜態資源快取控制

注意:condition 的值應填寫目標網域(即您希望保留的正規網域),而非要攔截的網域。範例中填 ^www.jb51.net 表示「若 Host 不等於 www.jb51.net 則導向」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved