免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1214 | 回复: 0
打印 上一主题 下一主题

url重定向 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:54 |只看该作者 |倒序浏览
URL重写,其实就是把带一大堆参数的url,变成一个看上去很规矩的url,主要目的是为了搜索引擎。 

举例 

/viewthread.jsp?id=1234 
/viewthread.jsp?id=1235 
/viewthread.jsp?id=1236 

重写后,可以用 

/viewthread/1234.htm 
/viewthread/1235.htm 
/viewthread/1236.htm 

我目前使用Tomcat+Apache,尝试过三种重写的方法 

一、Tomcat的过滤器 
  最典型的就是用 urlReweite的类库。大家爱如果有经验,自己写也不是很麻烦。 

修改web.xml增加过滤器,然后配置个过滤的规则就可以了 
web.xml修改部分 

   <!-- Set URL Rewrite--> 
<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> 
</filter-mapping> 
过滤规则 

     <?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN" 
        "http://tuckey.org/res/dtds/urlrewrite2.6.dtd"> 
<urlrewrite> 
  <rule> 
  <from>/viewthread/(\d+).htm$</from> 
  <to>/viewthread.jsp?id=$1</to> 
</rule> 
</urlrewrite> 

二、使用Apache的mod 

# 去掉这个前面的#,启用它 
LoadModule rewrite_module modules/mod_rewrite.so 

<VirtualHost _default_:80> 
# 其它的配置数据 

RewriteEngine On 
# 下面三行实现动态解析 
RewriteRule ^/viewthread/(\d+).htm$ /viewthread.jsp?id=$1 [L,PT] 
</VirtualHost> 

三、使用系统的404错误进行 
也就是页面没找到的错误 
实例: 
http://www.java2000.net/f29 
会被自动转发到 
http://www.java2000.net/forumdisplay.jsp?fid=29 

因为系统并不存在f29,所以使用了404的错误处理页面来实现这个功能 
页面代码如下 
查看复制到剪切板打印 
<%@ page language="java" contentType="text/html; charset=GBK" isErrorPage="true" pageEncoding="GBK"%>   
<%   
  response.setStatus(HttpServletResponse.SC_OK);   
  String key = (String) request.getAttribute("javax.servlet.forward.servlet_path");   
  if (key != null) {   
    int index = key.lastIndexOf("/");   
    if (index != -1) {   
      key = key.substring(index + 1);   
      if (key.startsWith("f") || key.startsWith("p")) {   
        try {   
          long id = Long.parseLong(key.substring(1));   
          String url = key.startsWith("f") ? "forumdisplay.jsp?fid=" : "viewthread.jsp?tid=";   
%>   
<jsp:forward page="<%=url+id%>"></jsp:forward>   
<%   
  return;   
        } catch (Exception ex) {}   
      }   
%>   
<jsp:forward page="<%=response.encodeURL("search.jsp")%>"><jsp:param name="keyword" value="<%=key %>" /></jsp:forward>   
<%   
  return;   
    }   
  }   
%>   
对不起,您请求的页面没有找到!  
总结 
第一种修改麻烦,但对于平稳运行的系统,是个不错的选择 
第二种需要配置Apache,但 Apache的重启速度很快,适合于有可能经常变得情况,而且Apache Mod的效率还是不错的 
第三种,最灵活的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP