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。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值