问题:页面通过"/servlet/detail?magid=520&categoryId=205“来访问一个servlet,这个链接在IE地址栏上给人家看起来很不舒服,想把它伪装一下变成别的地址,例如想把它伪装成:/servlet/detail/520_205.html 或者其他的url地址那该怎么实现了?
【注意:页面连接不是“/servlet/detail/520_205.html
“而是“/servlet/detail?magid=520&categoryId=205”】
urlrewrite.xml配置:
错误代码:
<urlrewrite>
<rule>
<from>/servlet/detail/([0-9]+)_([0-9]+).html</from>
<to>/servlet/detail?magid=$1&categoryId=$2</to>
</rule>
</urlrewrite>
有很多新手刚开始就认为这样配置就能解决了上面提问的问题。其实错误,这样页面只能通过:”/servelt/detail/24_42.html ” 来访问,访问这个地址时它会forward到/servlet/detail?magid=24&categoryid=42这个servlet。如果我们页面通过“/servlet/detail?magid=24&categoryid=42”这样来访问的话,是不会被重写的。这是新手的常遇到的一个问题。
正确代码:
<urlrewrite>
<rule>
<from>/servelt/detail/([0-9]+)_([0-9]+).html</from>
<to>/servelt/detail?magid=$1&categoryId=$2</to>
</rule>
<outbound-rule>
<from>/servlet/detail\?magid=([0-9]+)&categoryId=([0-9]+)</from>
<to>/servlet/detail/$1_$2.html</to>
</outbound-rule>
</urlrewrite>
通过上面的配置基本上实现了上面的提出的问题。
1:通过:“/servlet/detail?magid=24&categoryid=42”来访问,得在<outbound-rule>标签中配置,同时还得在<rule>中配置相关信息。如果rule中没有配置,会找不到相关的资源信息,抱404错误
2:上面的配置文件得注意的地方:在<outbound-rule>中的特殊符号“?”“&”等得转义。不然的话也会出错,不能被重写。像上面的“outbound-rule>from标签中路径中如果出现“?”问号的话,记得要转义,“\?”。
3:jsp中,上面提出的问题中,在页面如果直接写<a href="/servlet/detail?magid=24&categoryid=42"/>这样也是错误的,同样也没办法被重写。
它只能用在response.encodeURL()或者jstl中c:url中,才会被重写。这个也是容易犯错的地方。
jsp:页面关键代码:
<a href="<c:url value='/servlet/detail?magid=3934&categoryId=3'/>">JSTl c:URL</a><hr/>
<a href="<%=response.encodeUrl("/servlet/detail?magid=3934&categoryId=3") %>">response EncodeURL</a>
4:如果想在<outbound-rule>中定义多个from to标签这个是不可以的,<outbound-rule>中只能定义一个from to 标签。这个是我在程序中测试得出来的结论。只能定义一对from to标签是在个人测试得出来的结论,如果您测试出来不是这样的话,请给我指正,评判。
5:通过上面的urlrewrite.xml的配置, <a href=”servlet/detail?44_77.html">测试</a>这样子来访问也是可以被重写的。也就是相当于双向。
这样便很好的隐藏了真实地址这其中有点是需要注意的,引用官网中的一段话:Using the example above JSP's with the code
<a href="<%= response.encodeURL("/world.jsp?country=usa&city=nyc") %>">nyc</a>
will output
<a href="/world/usa/nyc">nyc</a>
Or JSTL
<a href="<c:url value="/world.jsp?country=${country}&city=${city}" />">nyc</a>
will output
<a href="/world/usa/nyc">nyc</a>需要转化的链接不能直接写在a标签中,需要写在c:url或其他服务器需要解析的变量中,这样才能对其重新显示
注意:<rule>标签可以单独的存在。而<outbound-rule>必须要和<rule>标签成对出现。而且在页面的时候需要<c:url>标签来转换成<rule>所对应的规则。
转自:http://hi.baidu.com/allen_zzw/item/e2d16a539fdf41a2acc857b2
分享到:
相关推荐
**Url Rewrite伪静态组件64位详解** 在网站开发与管理中,为了提高搜索引擎优化(SEO)的效果,提升用户体验,并简化动态网址,许多网站管理员会选择使用伪静态技术。`Url Rewrite伪静态组件`是Microsoft为IIS...
outbound-rule是URLRewrite中的一个重要概念,它可以将response.encodeURL或c:url重写后的URL转换成我们想要的格式。例如: ``` <outbound-rule> <from>/rewrite-status <to>/test/status/ </outbound-rule> ``` ...
伪静态URLRewrite技术是实现这一目标的重要手段之一。它主要通过服务器端或应用层面的规则设置,来改变URL的表现形式而不改变其实际的功能性。具体来说: - `<rule>` 是对进入服务器的URL进行重置,即当客户端请求...
URLRewrite是一个强大的URL管理工具,常用于Java Web应用程序中,它可以实现URL的重写和美化,提升用户体验,同时也有助于SEO优化。...理解和熟练运用URLRewrite对于提升Web应用的质量和性能至关重要。
2. **部署**:将`.jar`文件添加到项目类路径中,将`urlrewrite.xml`与`web.xml`放在同一目录下。在`web.xml`中,需要配置`<filter>`和`<filter-mapping>`元素来注册Url Rewrite Filter。默认配置是匹配所有URL(`/*`...
1. 规则结构:URLRewrite的规则由一系列元素组成,包括`<rule>`、`<condition>`、`<outbound-rule>`等。每个`<rule>`表示一条重写规则,`<condition>`定义了规则的触发条件,而`<outbound-rule>`则用于处理响应时的...
**URLRewrite地址重写**是Web开发中一个重要的技术,它主要用于优化和管理网站的URL,使得URL更友好、更具可读性,同时也能够实现动态URL到静态URL的转换,提升SEO效果。URLRewrite通常与Apache的mod_rewrite或者在...
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST ...
7. **标记和命名空间**:`URLRewrite`配置文件通常会使用特定的标记和命名空间,例如`<rule>`、`<condition>`、`<outbound-rule>`等,理解这些标记的含义和用法对于正确编写规则至关重要。 8. **日志和调试**:为了...
- 理解并熟练运用配置文件中的规则语法,如`<rule>`、`<condition>`、`<outbound-rule>`等元素。 - 注意URL重写可能导致的缓存问题,比如浏览器可能缓存了旧的URL,需要正确处理缓存策略。 - 对于大型项目,合理规划...