Tomcat 404頁面跳轉

某系統改版後,舊版的系統的訪問鏈接已經無效,但有一些路徑已經被搜索引擎收錄,所以當用舊的鏈接訪問系統時會出現404頁面。

用戶在用舊鏈接訪問時如果出現404頁面則將頁面跳轉到首頁,實現這個需求有多種方式,當時考慮了兩種方案:


一、在nginx上配置404頁面跳轉。由於修改nginx配置需要聯繫運維幫忙,所以考慮在tomcat裏進行實現。(tomcat我們有權限操作)

nginx配置404跳轉參考:http://www.cnblogs.com/jiangyao/archive/2010/07/10/1774981.html


二、在tomcat裏實現,實現方式如下:

1)修改對應項目的WEB-INF/web.xml文件,在web.xml中加入如下代碼

<error-page>
      <error-code>404</error-code>
      <location>404Redirect.html</location>
</error-page>
2)在404Redirect.html中寫入如下代碼

<html>
    <head>
        <meta http-equiv="refresh" content="0; url=/"/>
    </head>
</html>
開始測試,chrome和firefox均符合期望,IE10上測試依然還是404頁面。後來發現IE中有一項設置可以阻止refresh跳轉。

所以將404Redirect.html修改爲通過js跳轉,如下

<html>
    <head>
        <script type="text/javascript">
            window.location.href = "/";
        </script>
    </head>
</html>
經測試,IE10上依然不行,還是404頁面。但通過調試,發現響應正文部分確實是我的代碼,卻沒有顯示。

後來通過在google發現IE瀏覽器在返回狀態爲404的時候,如果頁面內容長度小於512bytes,它會用瀏覽器自己的錯誤頁面代替我設置的404Redirect.html。

好吧,用一個最愚蠢的辦法騙過最聰明的IE吧,修改後的404Redirect.html代碼如下

<html>
    <head>
        <script type="text/javascript">
            window.location.href = "/";
        </script>
    </head>
    <body style="display:none">
       body中的內容對用戶沒有任何實際意義,它存在的唯一目的就是讓響應內容長度大於512bytes,
       以此騙過“聰明”的IE。
       IE瀏覽器在返回狀態爲404的時候,如果頁面內容長度小於512bytes,它會用瀏覽器自己的默認錯誤頁面代替響應頁面的內容。
    </body>
</html>
再次進行測試,chrome、firfox、IE均OK。



發佈了30 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章