apache url rewrite重写规则使用小结

发布时间:2020-08-17编辑:脚本学堂
在apache中url rewrite重写是个重要的知识点,url rewrite规则配置的好,即可以减少错误页面的出现,又可以使url规范化,这里对url rewrite重写规则做个总结,供大家参考。

先来看一个apache使用url rewrite重写模块配置apache伪静态的范例图。

apache使用url rewrite重写模块

 

图2

 

图3

使用url rewrite重写规则的步骤如下:

首页,访问其官网:http://tuckey.org/urlrewrite/,我下载的是Beta版的urlrewritefilter-3.2.0,下载后将其中的urlrewrite-3.2.0.jar扔到需使用此功能项目的lib目录中去

其次,在web.xml中加入如下配置:
 

复制代码 代码示例:
<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>WARN</param-value>
     </init-param>
    </filter>
    <filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

其实,urlrewrite其实就是个过虑器,它将会过虑用户的所有请求,符合规则的便对其进行重定向
具体的配置参数的使用方法见官方文档:http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/index.html

配置好web.xml后将下载的urlrewritefilter-3.2.0中的urlrewrite.xml配置文件放在WEB-INF目录下,这样在使用urlrewritefilter时它便自动到该目录下读取相关的配置了。

url rewrite重写规则配置:

复制代码 代码示例:
<rule>
<from>/zh_CN/NewsInfo/NEWS_([0-9]+)</from>
<to>/zh_CN/NewsInfo/view.do?method=view&id=$1</to>
</rule>
   
<outbound-rule>
<from>/zh_CN/NewsInfo.do?method=view&id=([0-9]+)$</from>
<to>/zh_CN/NewsInfo/NEWS_$1</to>
</outbound-rule>
 

rule结点中form的规则默认使用的是正则表达式来匹配的,当用户访问服务器时的URL会与该配置相比较,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转,具体配置可见官网文档。
outbound-rule结点是服务器解析后的页面URL对外表现的形式,配置与上面的大体相同。

如我一新闻链接代码在JSP中书写的形式如下:
 

复制代码 代码示例:
<c:url var="news_url" value="/zh_CN/Press/view.do?method=view&id=${cur.id}&msg=Press" />
<li>· <a href="${news_url}" mce_href="${news_url}" target="_blank" title="${cur.titleSub}">${cur.title}</a></li>

经服务器解析后,最终显示在页面中的将变成:
 

复制代码 代码示例:
<li>· <a href="/项目名/zh_CN/NewsInfo/NEWS_9999" mce_href="项目名/zh_CN/NewsInfo/NEWS_9999" target="_blank" title="${cur.titleSub}">新闻标题</a></li>

当用户点击此链接后urlrewrite便用通过rule的配置重跳转到真正的访问地址,这样便很好的隐藏了真实地址

注意:
 

Using the example above JSP's with the code
<a href="<%= response.encodeURL("/world.jsp?country=usa&amp;city=nyc") %>">nyc</a>
will output
<a href="/world/usa/nyc">nyc</a>

Or JSTL
<a href="<c:url value="/world.jsp?country=${country}&amp;city=${city}" />">nyc</a>
will output
<a href="/world/usa/nyc">nyc</a>
Note, If you are using JSTL (ie, <c:url) this will work also.

需要转化的链接不能直接写在a标签中,需要写在c:url或其他服务器需要解析的变量中,这样才能对其重新显示。