在 Java Web 應用中實作 HTTP 301 永久重導向,對於 SEO 至關重要。Tomcat 本身不直接提供重導向規則引擎,業界標準做法是整合 UrlRewriteFilter,透過 XML 規則靈活控制網域轉址、路徑重寫等。本文說明如何設定將非 www 網域永久導向 www 版本,並排除本地開發環境。
operator="notequal" 表示「不等於」,配合 host 條件檢查請求的 Host 標頭。<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>
<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 | 正則錨點 ^ 確保完整匹配,點號需跳脫 |
urlrewritefilter-.jar 放入 WEB-INF/libweb.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>
urlrewrite.xml 放入 WEB-INF 目錄/en/ → ?lang=en)注意:
condition的值應填寫目標網域(即您希望保留的正規網域),而非要攔截的網域。範例中填^www.jb51.net表示「若 Host 不等於 www.jb51.net 則導向」。