当前位置: 代码迷 >> Web前端 >> urlrewrite的应用,亲测
  详细解决方案

urlrewrite的应用,亲测

热度:762   发布时间:2012-09-19 13:43:54.0
urlrewrite的使用,亲测!

?

首先声明:大牛们,别笑,俺是一小菜菜!

?

这两天发现项目上貌似有点问题,很多页面在跳转的时候 往往只是简单的<a href="xxxxxx.MM">

其实这样 也许会给恶意攻击者、敌对的竞争方带来便利!

因此,想到用urlrewrite来弄弄,但是老是出现问题!!总是跳不过去!


在大牛牛的指导下,终于搞定了,还是来做一个总结吧!!

首先下载urlrewrite的jar包。

然后在web.xml里面配置filter,这个filter必须配置在struts的filter前面,因为这是一个执行顺序的问题!

? ? <filter>

? ? ? ? <filter-name>UrlRewriteFilter</filter-name>

? ? ? ? <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>

? ? ? ? <init-param>

? ? ? ? ? ? <param-name>logLevel</param-name>

? ? ? ? ? ? <param-value>debug</param-value>

? ? ? ? </init-param>

? ? </filter>

? ? <filter-mapping>

? ? ? ? <filter-name>UrlRewriteFilter</filter-name>

? ? ? ? <url-pattern>/*</url-pattern>

? ? </filter-mapping>

之后,在相应的web-inf下面新建一个rule文件,用相应的规则处理url的问题!

这个文件名使用urlrewrite.xml

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"

? ? ? ? "http://tuckey.org/res/dtds/urlrewrite3.2.dtd">

<urlrewrite>

? ?<rule>

? ? <from>^(.*)\.do$</from>

? ? <to type="forward">$1.MM</to>

? ? </rule>?

</urlrewrite>

这是我所用到的url变换规则,这个东东困扰了我好久!
再在配置文件web.xml中加上
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST </dispatcher>
? ? ? ? ? ? ? ? <dispatcher>FORWARD </dispatcher>?
? ? ? ? ? ? ? ? <dispatcher>INCLUDE </dispatcher>?
</filter-mapping>

其实搞出来就是那么的简单,其中注意4个方面,就能很简单的做出来!

1、<from> ? ? ? ? <to>
也就是说这个.do ? ?是在页面里面写好的,也就是例如:
<body>
<a href="123123.do">高帅富</a>
</body>

从页面提取(from)132123.do文件映射到(to)什么文件!

?

2、其实这个.do文件是虚拟的,是没有这个文件的!其对应的文件名为 123123.MM

?

3.关于正则表达式 ,请自己在网上找相关的api文档 ?就会有相应的解答!

这里指出:<to type="forward">$1.MM</to>中的$1.MM,“$1”这个符号,指的是上文中的小括号()里面的内容,如果有两个小括号(),$1指向指向左起第一个,$2指向左起第二个!

?

4、type="forward"这个 这个可是把我搞惨了 ?还有有俺家的大牛牛在 ,才把俺引出了迷雾!

平时用forward的时候都没注意到,这意思是在跳转页面的时候,url地址在地址栏不变,什么不变呢??

还是按照123123.do输出在地址栏。

?

,如果你写成了type="redirect" ?那么,地址栏将会变成下面那个123123.MM!!!呵呵呵

?

?

如需将action的跳转 ?例如:list变成list.do ?只需在struts配置文件加上

<constant name="struts.action.extension" value="do"></constant>

<!--action后缀.do -->

web.xml里配置

?

? <init-param>

<param-name>struts.action.extension</param-name>

<param-value>do</param-value>

</init-param>

?

总结一句话:小菜菜的基础知识不扎实 ?好高骛远!! ? ? ? ? ? ? ? ? ? ? ? ? 有爱好IT的朋友可以加我QQ:474515923

?

互相学习 ?共同进步 最终达到共同富裕

1 楼 fatedgar 2012-05-04  
我想要一种结果像这样:
在外网服务器上有个项目他的URL是:http://10.252.4.4:8077/jkda3
我想在本地输入:http://happysys:8080/jkda3就连接到上面的URL中去了
这个可以实现不?