jsp 用urlrewrite 实现URL 重写

合集下载

URLRewriteModule2.1URL重写模块规则写法

URLRewriteModule2.1URL重写模块规则写法

URLRewriteModule2.1URL重写模块规则写法⽬录先决条件设置测试⽹页创建重写规则命名规则定义模式定义动作查看配置⽂件中的重写规则测试重写规则创建重定向规则测试重定向规则创建访问阻⽌规则测试访问阻⽌规则概要先决条件本演练需要满⾜以下先决条件:IIS安装 URL Rewrite Module 2.1下载页⾯下载链接启⽤了⾓⾊服务的IIS 7或更⾼版本。

URL重写模块已安装。

有关更多信息,请参见使⽤URL重写模块。

设置测试⽹页为了演⽰URL重写模块如何⼯作,我们将使⽤⼀个简单的测试页⾯。

该页⾯读取Web服务器变量,并在浏览器中输出它们的值。

复制以下代码,并将其放在名为article.aspx的⽂件的%SystemDrive%\ inetpub \ wwwroot \⽂件夹中:<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>URL Rewrite Module Test</title></head><body><h1>URL Rewrite Module Test Page</h1><table><tr><th>Server Variable</th><th>Value</th></tr><tr><td>Original URL: </td><td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td></tr><tr><td>Final URL: </td><td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td></tr></table></body></html>创建重写规则我们将创建⼀个简单的重写规则,该规则将使⽤以下格式重写URL:⾄:我们将使⽤IIS管理器中的URL重写UI创建⼀个重写规则。

UrlRewrite再说Url重写

UrlRewrite再说Url重写

UrlRewrite再说Url重写为什么要进⾏URL-RewriteScottGu的blog中给出了两个重要的原因:1.保证WebApplication在进⾏结构调整,移动页⾯位置时,⽤户收藏的URL不会因此⽽成为死链。

2. SEO优化。

摘引⾃ScottGu Blog 的原⽂---------------------------------------------------------------------------Why does URL mapping and rewriting matter?The most common scenarios where developers want greater flexibility with URLs are:1) Handling cases where you want to restructure the pages within your web application, and you want to ensure that people who have bookmarked old URLs dont break when you move pages around. Url-rewriting enables you to transparently forward requests to the new page location without breaking browsers.2) Improving the search relevancy of pages on your site with search engines like Google, Yahoo and Live. Specifically, URL Rewriting can often make it easier to embed common keywords into the URLs of the pages on your sites, which can often increase the chance of someone clicking your link. Moving from using querystring arguments to instead use fully qualified URLs can also in some cases increase your priority in search engine results. Using techniques that force referring links to use the same case and URL entrypoint (for example: /scottgu instead of /scottgu/default.aspx) can also avoid diluting your pagerank across multiple URLs, and increase your search results.In a world where search engines increasingly drive traffic to sites, extracting any little improvement in your page ranking can yield very good ROI to your business. Increasingly this is driving developers to use URL-Rewriting and other SEO (search engine optimization) techniques to optimize sites (note that SEO is a fast moving space, and the recommendations for increasing your search relevancy evolve monthly). For a list of some good search engine optimization suggestions, Id recommend reading the SSW Rules to Better Google Rankings, as well as MarketPositions article on how URLs can affect top search engine ranking.---------------------------------------------------------------------------第⼀点原因中所描述的场景,在Web站点改版中经常碰到。

rewriterule用法 -回复

rewriterule用法 -回复

rewriterule用法-回复要使用RewriteRule进行重写规则,首先需要了解什么是RewriteRule以及它的用途。

RewriteRule是Apache中的一个模块,用于对URL进行重写和重定向。

它允许网站管理员根据自己的需求修改URL,以改进网站的用户体验和搜索引擎优化。

RewriteRule的基本语法如下:RewriteRule pattern target [flags]- `pattern`是一个正则表达式,用于匹配要重写的URL。

- `target`是一个字符串,用于指定要将URL重写为的新URL。

- `flags`是一些可选的标志,用于指定重写规则的行为。

下面,我将逐步回答关于RewriteRule用法的问题。

1. 为什么要使用RewriteRule?- RewriteRule允许网站管理员根据自己的需求修改URL,以改善网站的用户体验。

通过使用有意义的URL结构,用户可以更容易地理解网站的内容和页面层次结构。

- 重写URL还可以提升网站的搜索引擎优化。

搜索引擎更容易理解具有关键字和有意义结构的URL,并将其作为排名因素之一。

2. 如何配置RewriteRule?- 首先,确保你的服务器已启用Rewrite模块。

可以在Apache的配置文件中找到相关的配置项,并确保它已被取消注释。

- 在你的网站根目录下的.htaccess文件中添加RewriteRule。

如果你的网站无法使用.htaccess文件,可以在服务器的配置文件中添加RewriteRule。

3. 如何使用RewriteRule进行简单的重写?- 假设我们想将URL " 重写为"RewriteRule ^product/([0-9]+) product.php?id=1 [L]这个规则首先使用正则表达式`^product/([0-9]+)`匹配URL,并将其中的数字捕获为1。

然后将URL重写为product.php?id=1,其中1是捕获到的数字。

rewriterule用法

rewriterule用法

RewriteRule是Apache服务器中用于URL重写的指令。

它的基本语法如下:
bash复制代码
RewriteRule pattern substitution [flags]
其中,pattern是用于匹配URL的模式,substitution是要替换的URL,flags是可选的标志位,用于控制重写的行为。

RewriteRule的标志位包括:
•R:强制外部重定向,后面可以加301(永久重定向)或者302(暂时重定向)跳转,不加默认302(暂时重定向)。

•L:表示停止匹配其他规则,只对当前规则进行匹配。

•P:表示对URL进行预处理。

•QSA:表示将请求参数添加到新的URL中。

•NE:表示不转义特殊字符。

以下是一个示例:
css复制代码
RewriteEngine On
RewriteRule ^old_page.html$ /new_page.html [R=301,L]
这个规则会将所有访问old_page.html的请求重定向到new_page.html,并使用301永久重定向。

注意,在使用RewriteRule时,需要确保Apache的mod_rewrite模块已经启用。

php网址重定向url重写教程

php网址重定向url重写教程

PHP网址重定向,URL重写教程PHP网址重定向,URL重写教程2013-03-18 10:57:14| 分类:php|举报|字号订阅如何开启mod_rewrite.so:/html/webkaifa/apache/2010/0228/ 4006.html如何书写重写规则:/newsoft/ApacheMenual_CN_2.2n ew/mod/mod_rewrite.html(我现在就想开启和配置:在conf 目录的httpd.conf文件中找到LoadModule rewrite_module modules/mod_rewrite.so将这一行前面的#去掉。

2.在要支持url rewirte的目录启用AllowOverride All,通常是&lt;Directory '/var/www/html&gt;这个主目录下面的AllowOverride,修改这一个就OK3.在虚拟主机中开启,如下&lt;VirtualHost :80&gt; RewriteEngine On rewriteOptions Inherit DocumentRoot/var/www/html/PHPbook/ ServerName&lt;/VirtualHost&gt;4.在/var/www/html/PHPbook/下某个目录书写你的.htaccessOK完成)学习目标1.了解.htaccess常用指令2.实现网站统一入口在实现PHP网址重定向的功能之前,必须确保http.conf中已经加载了mod_rewrite模块;为了能灵活地控制重定向效果,下面开始了解.htaccess几个常用的指令。

rewriteBase 指令的功能:指定一个新目录作为重写规则的根目录。

有点抽象,下面我们做一个例子了解它的具体功能。

准备工作:1. 在根目录(域名为)下建立.htaccess 文件rewriteEngine OnrewriteBase /articlerewriteRule^news_sport1\.html$ news.php?id=12.在根目录下建立news.php文件,内容如下&lt;!--?php echoempty($_GET)?'root':'root';--&gt;3.在根目录下建立文件夹article,然后在article文件夹里建站news.php,内容为&lt;!--?php echo empty($_GET)?'article':'article';--&gt;目的:如果我们在浏览器输入域名/news_sport1.html,会输出什么呢?答案是article下面我们修改.htaccess的内容,在rewriteBase前面加上’#’符号,将它注释掉,看看这一次输出什么内容?这一次输出的是root,现在相信你对rewriteBase这一指令的功能已经有了大概的了解了吧。

ASPNET伪静态 UrlRewrite(Url重写) 实现和配置------转载

ASPNET伪静态 UrlRewrite(Url重写) 实现和配置------转载

伪静态 UrlRewrite(Url重写) 实现和配置------转载2010-08-30 11:06 来源:博客园作者:夏楚枫阅读:81次核心提示:大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的核心提示:大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的运行稳定和速度...大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的运行稳定和速度,坏处就是生成列表的时候会因为增加一条记录从而需要所有相关的列表进行重构,当然不排除有的公司已经攻克的这个问题,但对于大众程序员来说,他依旧是个问题,而且生成的化对于中小型网站也不一定会比动态的号,因为管理比较麻烦。

结构以上事实,然后伪静态技术产生了,规范的说就是URL重写技术,他对于ASPX格式支持最好,当然也可以重写HTML格式的文件,但这需要IIS的设置,相对比来说,ASPX格式的更方便,本站就是采用了该URL重写技术,这个技术优点显而易见:方便搜索引擎收录,方便查看,等等。

那么接下来我们来看看如何配置他吧首先你要在你的项目里引用两个DLL:URLRewriter.dllActionlessForm.dll真正实现重写的是 URLRewriter.dll 但是如果你要实现分页,那么必须使用这个ActionlessForm.dllURLRewriter.dll1、下载文件下载地址1:/source/524514下载地址2:/UserFiles/URLRewriter.rar 下载地址3:/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi下载地址4:本站下载2、配置WEB.CONFIG文件在项目中引用这个程序集,伪静态语法...(例把.aspx 的页面用.html来表示,web.config文件中--> 添加以下节点 <configuration><configSections><section name="RewriterConfig" requirePermission= "false" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /></configSections><RewriterConfig><Rules><RewriterRule><!--一个参数-><LookFor>~/cn/ss_(.[d]*).html</LookFor><SendTo>~/cn/news.aspx?id=$1</SendTo></RewriterRule><RewriterRule><!--传两个参数的--><LookFor>~/cn/ss_(.[d]*)0(.[w]*).html</Look For> <!--(.[d]*)(.[w]*).html 或者ss_,(.[0-9]*),(.[0-9]*).html--><SendTo><![CDATA[~/cn/news.aspx?id=$1&sid=$ 2]]></SendTo></RewriterRule><RewriterRule><!--三个参数--><LookFor>~/cn/ss_(.[d]*)0(.[w]*)0(.[w]*).ht ml</LookFor><SendTo><![CDATA[~/ZH-CN/news.aspx?id=$1&si d=$2&n_id=$3]]></SendTo></RewriterRule><RewriterRule><LookFor>~/dfsaddf/index(d*).html</LookFor><SendTo>~/Favorites_Page.aspx</SendTo></RewriterRule></Rules></RewriterConfig></configuration><system.web><httpHandlers><add verb="*" path="*.aspx" type="URLRew riter.RewriterFactoryHandler, URLRewriter" /><add verb="*" path="*.html" type="URLRew riter.RewriterFactoryHandler, URLRewriter" /></httpHandlers></system.web><!--<httpModules><add type="URLRewriter.ModuleRewriter, URLRew riter" name="ModuleRewriter"/></httpModules>-->设置完以上步骤,就基本可以运行了,其中<RewriterRule/>标签里面就是重写的一个模块,<LookFor/>里面的是重写后的地址,而<SendTo/>则是原地址。

JAVA实现强大的URL规则重写地址方式

JAVA实现强大的URL规则重写地址方式

这个URL规则方式重写URL地址是才用正则表达式的方式来做的!只要通过设置规则参数和url规则,如:{channel}/{type}/{date}/{id}.html这样我们就可以通过我开发这个工具来进行重写地址了,如果你以前用的是p=index&amp;type=template&amp;date=20130405&amp;id=1通过编码可以得到:/index/template/20130405/1.html当然也可以通过解码得到真正的URL地址,使用此工具类,Java的网站,URL地址的SEO优化变得so Easy写一个Filter,是不是就可以了,好简单! 实现的代码如下:01package com.wuwei.test;0203import org.marker.web.url.Parameter;04import org.marker.web.url.URLRewrite;05/**06* 测试URL规则07* @author marker08* */09public class Test {1011public static void main(String[] args) {12URLRewrite re = new URLRewrite();//设置规则参数16re.ruleParameter.put("{channel}", new Parameter("p","{channel}","([a-zA-Z_0-9]+)"));17re.ruleParameter.put("{type}", new Parameter("type","{type}","([a-zA-Z_0-9]+)"));18re.ruleParameter.put("{id}", new Parameter("id","{id}","([0-9]+)"));192021//初始化两个规则22re.putRule("列表","{channel}.html");23re.putRule("内容","{channel}/{type}/cms-thread-{id}.html");24252627//文章类型的地址28String url ="p=index&amp;type=article&amp;id=1";29System.out.println("访问的地址:"+url);30System.out.println("-----------------------");31String gourl = re.encoder(url);32System.out.println("URL编码:"+gourl);33gourl = re.decoder(gourl);34System.out.println("URL解码:"+gourl);3536System.out.println("==========================");3738//栏目类型的地址39url ="p=about";40System.out.println("访问的地址:"+url);41System.out.println("-----------------------");42gourl = re.encoder(url);43System.out.println("URL编码:"+gourl);44gourl = re.decoder(gourl);45System.out.println("URL解码:"+gourl);4647}48}更多信息请查看IT技术专栏。

rewriterule 说明

rewriterule 说明

rewriterule 说明RewriteRule - 理解与使用RewriteRule是一个在网页服务器配置文件中使用的指令,用于重写(或修改)URL的路径。

它允许网站管理员通过修改URL路径来改变网页的访问方式。

下面是对RewriteRule的详细说明。

RewriteRule指令的基本语法如下:```RewriteRule pattern target [flags]```- pattern:指定一个正则表达式模式,用于匹配URL路径中的一部分。

这个模式可以包含特殊字符和通配符,如`*`或`?`。

- target:指定一个目标URL路径,用于替换原始的URL路径。

这可以是一个相对路径或一个完整的URL。

- flags:可选参数,用于指定RewriteRule的附加行为,如[R]表示重定向,[L]表示终止重写规则的匹配。

RewriteRule的使用场景很多,常见的包括:1. URL重写:通过修改URL路径,使得用户更容易记住和分享链接。

例如,将`/products/123`重写为`/product?id=123`。

2. 页面重定向:将某个或多个URL重定向到另一个URL,可以是相对路径或完整URL。

例如,将`/oldpage.html`重定向到`/newpage.html`。

3. 屏蔽文件或目录:防止某些敏感文件或目录被直接访问。

例如,禁止访问`.htaccess`文件的URL路径。

4. 服务器端代理:将某些URL请求代理到其他服务器。

例如,将所有`/api/*`的请求代理到另一个服务器上的`/api/*`路径。

在配置文件(如`.htaccess`)中使用RewriteRule时,确保文件所在目录的AllowOverride设置为All,以便允许RewriteRule生效。

需要注意的是,RewriteRule只能在Web服务器(如Apache)的配置文件中使用,无法在网页的HTML代码中使用。

URLRewrite配置和使用

URLRewrite配置和使用

URLRewrite 备忘我们为什么要使用URLRewrite重写url技术呢,在网上搜了一下,有篇文章说是有主要三个原因(会用搜索的人一定能在网上搜索到)1、满足搜索引擎的要求2、隐藏技术实现,提高网站的移植性3、满足美感的要求由于本人才疏学浅,对于第一条和第二条的前半句还是比较赞同,但对于第二条后半句,个人没有什么感觉,也没用通过它移植过,所以不多说。

基于第三条,我就不发表言论了。

废话不多说了。

看看怎么使用吧。

创建一个web工程,结构目录文件如下(注意工程中我们需要使用到urlrewrite.jar包)Url 重写的主要内容就是在web-inf中要编写urlrewrite.xml文件,其实内容很简单。

本例中的xml编写的内容如下我们先来分析一下rule规则<rule><from>^/page/(.*)$</from><to>/page/$1.jsp</to></rule>from代表你在访问网站的时候,浏览器地址栏中显示的URLto 代表将浏览器中显示的URL转换后的地址,也就是你网站中真正访问的URL以之前我们建立的web项目为列(这里只是简略的做了一下转换,既不显示路径后缀) 我们访问http://localhost:8080/URLRewrite/page/first而实际我们访问的是http://localhost:8080/URLRewrite/page/first.jsp我们再来说说<outbound-rule> ,outbond-rule在网上的说的不多。

其实RULRewrite 本身的说明已经写的很清楚了。

The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url) the url /rewrite-status will be rewritten to /test/status/.The above rule and this outbound-rule means that end users should never see the url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks在使用response.encodeURL或是c:url的时候,路径rewrite-status将被重写成/test/status/以上的rule和 outbound-rule将使最终用户在他们的地址栏或链接中都不会看到/rewrite-status而只能看到重写后的/test/status/其它主要是用于解决我们在页面中显示链接的问题,如我们在页面上有一个链接页面代码如下我们对链接使用respone.encodeURL进行编码,用于跳转到第二页。

java中的url重写

java中的url重写

java中的url重写在很多情况下,WEB中进行URL重写一般是使用WEB服务器自身提供的组件。

开源项目Url Rewrite Filter ,使用Filter来完成这项工作,从而不依赖于WEB服务器组件。

要让他工作起来,首先要在web.xml中声明一个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>WARN</param-value></init-param></filter><filter-mapping><filter-name>UrlRewriteFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>然后在WEB-INF目录下新建urlrewrite.xml在其中进行重写规则的定义,它使用正则表达式来进行规则的定义。

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE urlrewrite PUBLIC "-////DTD UrlRewrite 2.6//EN""/res/dtds/urlrewrite2.6.dtd"><!--Configuration file for UrlRewriteFilter/urlrewrite/--><urlrewrite><rule><from>/test.html</from><to type="redirect">%{context-path}/page.html</to></rule><rule><from>/param/(.*)</from><to>/test.jsp?param=$1</to></rule></urlrewrite>上面是一个简单的测试<rule><from>/test.html</from><to type="redirect">%{context-path}/page.html</to> </rule>是将test.html的访问请求转发给page.html<rule><from>/param/(.*)</from><to>/test.jsp?param=$1</to></rule>将test.jsp?param=111这种请求重写为/param/111大家有兴趣的话也可以下载后测试一下。

nginx url重写实例

nginx url重写实例

nginx url重写实例
当使用Nginx 进行URL 重写时,可以通过配置rewrite 指令来实现。

以下是一些常见的URL 重写示例:
1、将所有以/oldpath 开头的URL 重写为/newpath:
nginx
location /oldpath {
rewrite ^/oldpath(.*)$ /newpath$1 permanent;
}
2、将所有以.jpg 结尾的URL 重写为.jpg?param=value:
nginx
location ~ \.jpg$ {
rewrite ^/(.*)\.jpg$ /$1.jpg?param=value last;
}
3、将所有以/api/ 开头的URL 重写为/api/newpath:
nginx
location /api/ {
rewrite ^/api/(.*)$ /api/newpath$1 last;
}
4、将所有以/static/ 开头的静态文件URL 重写为/static/newpath/:
nginx
location /static/ {
rewrite ^/static/(.*)$ /static/newpath/$1 last;
}
这些示例仅提供了基本的URL 重写规则。

你可以根据自己的需求进行修改和
扩展。

请注意,在使用rewrite 指令时,需要确保重写后的URL 是有效的,否则可能会导致页面无法访问。

Url路径重写的原理

Url路径重写的原理

Url路径重写的原理的地址重写(URLRewriter)实现原理及代码⽰例吴剑 2007-01-01原创⽂章,转载必需注明出处:概述访问者输⼊:/default.aspx,实际请求和响应的地址却是:/wu-jian/default.aspx, 这就是UrlRewrite,除了实现⼆级域名功能,它在简化⽤户输⼊地址、SEO、⽹站版本迭代更新等多个⽅⾯发挥着重要作⽤。

微软曾在.net framework 1.1中提供过⼀个名为URLRewriter的⼩⼯具供开发⼈员轻松实现UrlRewrite,下载地址为:本⽂以URLRewriter为例,在.net framework 2.0的环境下做了⼩部分优化调整,供⼤家学习和参考,能⼒有限,不⾜之处请⼤家及时指出。

本⽂假设读者对URLRewriter、的 Http管线有⼀定了解,否则请查阅相关资料。

配置URLRewriter在web.config⾥通过⾃定义配置结合正则表达式来实现URL重写。

⾃定义节点的声明:<configSections><section name="RewriterConfig"type="PaoTiao.PTRewriter.Config.RewriterConfigSerializerSectionHandler, PaoTiao.PTRewriter"/></configSections>⾃定义节点配置项:<RewriterConfig><Rules><RewriterRule><LookFor>^http://([a-zA-Z0-9]{4,16})/default.aspx$</LookFor><SendTo>/$1/default.aspx</SendTo></RewriterRule><RewriterRule><LookFor>^/([a-zA-Z0-9]{4,16})/$</LookFor><SendTo>/test/url.aspx?p=$1</SendTo></RewriterRule></Rules></RewriterConfig>如上我配置了两个规则,以实例说明,第⼀个可将: 重写到:/wu-jian/default.aspx第⼆个可将:/wu-jian 重写到:/test/url.aspx?p=wu-jian但微软的URLRewriter LookFor并不⽀持到域名位置,它只能在根⽬录之后做⽂章,截选了它源码DEMO中的⼀段:<RewriterRule><LookFor>~/(\d{4})/(\d{2})/(\d{2})\.aspx</LookFor><SendTo>~/ShowBlogContent.aspx?year=$1&amp;month=$2&amp;day=$3</SendTo></RewriterRule>可以发现,当需要使⽤⼆级域名或⾃定义级别更⾼的rewrite时,URLRewriter是不⽀持的,所以在此我将源代码作了⼀⼩部分优化,匹配与重写都使⽤LookFor和SendTo中的原始表达式,不做任何智能替换与修改。

UrlRewrite使用方法

UrlRewrite使用方法

1. 下载jar包, 并加入到WEB-INF/lib下2. 在WEB-INF/web.xml中增加下面的配置<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 --><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping>3. 在WEB-INF/下增加配置文件urlrewrite.xml4. 重启上下文环境过滤器的参数1. confReloadCheckInterval: 配置文件重加载间隔. 0表示随时加载, -1表示不重加载, 默认-12. confPath: 配置文件路径. 是相对context的路径, 默认/WEB-INF/urlrewrite.xml3. logLevel: 设置日志级别, 可以是: TRACE, DEBUG, INFO(默认), WARN, ERROR, FATAL, log4j, commons, slf4j, sysout:{level}(比如sysout:DEBUG), 如果你使用普通的日志级别有一定困难, 可以调为: sysout:DEBUG(表明是使用控制台输出的调试级别)4. statusPath: 设置改变状态路径, 不能和已经安装的应用冲突(注意, 默认是/rewrite-status), 注意, 必须以/开始5. statusEnabled: 设置status是否开启, 期望得到的值是true, false, 默认true6. statusEnabledOnHosts: 设置允许status的主机, *可以被用作通配符, 默认是”localhost, local, 127.0.0.1”7. modRewriteConf: 设置rewrite模式, 默认是false, 使用mod-rewrite(可以参照apache服务器的mod_rewrite相关资料)方式的配置文件, 如果设置为true并且confPath没有设置则配置文件路径将会被默认为/WEB-INF/.htaccess8. modRewriteConfText: 从这些参数的值加从载mod_rewrite样式的配置, 设置这些参数则其他所有的参数都会被忽略. 比如:<init-param><param-name>modRewriteConfText</param-name><param-value>RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]</param-value></init-param>9. allowConfSwapViaHttp: 设置是否允许通过HTTP方式交互设置参数, 比如, 通过调用/rewrite-status/?conf=WEB-INF/urlrewrite2.xml5. 配置文件WEB-INF/urlrewrite.xml1. DTD约束<!DOCTYPE urlrewritePUBLIC "-////DTD UrlRewrite 3.0//EN""/res/dtds/urlrewrite3.0.dtd">2. <urlrewrite />2.1. default-match-type(可选):2.1.1. regex, 默认. 所有未指定match-type属性的rule都使用java正则表达式进行匹配2.1.2. wildcard: 所有未指定match-type属性的rule都使用通配符匹配引擎匹配2.2. decode-using(可选):2.2.1. header, utf8: 默认. 使用request.getCharacterEncoding()得到的编码对URL解码, 如果是空, 使用utf8.2.2.2. null: 不进行解码. 设置为: decode-using=”null”2.2.3. header: 仅仅使用request.getCharacterEncoding()解码2.2.4. [encoding]: 仅仅使用一个指定的字符编码比如ISO-8859-1.2.2.5. header, [encoding]: 对一个URL解码时使用request.getCharacterEncoding(), 如果得到的值为空, 则使用encoding指定的编码.2.3. use-query-string(可选):2.3.1. false: 默认. 在from进行匹配的时候, 查询字符串不会参加2.3.2. true: 查询字符串参与from的匹配2.4. use-context(可选):2.4.1. false: 默认. from元素匹配时, application的contex路径将不会增加到url中2.4.2. true: application的contex路径参与from元素的匹配3. <rule />: 0个或多个3.1. enabled(可选):3.1.1. true: 默认.允许这个规则3.1.2. false: 废弃这个规则3.2. match-type(可选):3.2.1. regex: 默认. 使用java正则匹配3.2.2. wildcard: 使用通配符表达式引擎4. <outbound-ruld />: 0个或多个. 和普通的rule非常相似, 但是这里是在response.encodeURL()方法调用时进行重写的.4.1. enabled(可选):4.1.1. true: 默认. 允许规则4.1.2. false: 废弃规则4.2. encodefirst(可选):4.2.1. fasle: 默认, 在运行了encodeURL()方法之后运用这个重写规则4.2.2. true: 在encodeURL()之前运用这个重写规则5. <name />: 一个用于记录规则名称的可选元素, 可以在<rule />和<outbound-rule />上使用6. <note />: 用于记录规则描述的一个简单可选元素, 可以用在<rule />和<outbound-rule />上.7. <condition />: 针对规则的选择条件. 注意, 在规则运用的时候必须满足所有的条件.7.1. type(可选):7.1.1. header: 默认. 如果设置, 头名称必须通过<condition />的name属性指定7.1.2. method: 请求方法. GET, POST, HEAD等7.1.3. port: application运行的端口7.1.4. time: 服务器当前时间(使用Unix时间戳), 这个通常被用于确保内容仅在设置的时间存活7.1.5. year: 服务器的当前年7.1.6. month: 服务器的当前月份7.1.7. dayofmonth: 当天是一月的第几天, 每月第一天是17.1.8. dayofweek: 当天是一周的第几天, 星期天是77.1.9. ampm: 上午或下午7.1.10. hourofday: 一天的第多少小时(24小时制)7.1.11. minute: 当前服务器时间的分7.1.12. second: 当前服务器时间的秒7.1.13. millisecond: 当前服务器时间的毫秒7.1.14. attribute: 检查request的属性(getAttribute)值, 要检查的属性名称通过<condition />的name指定7.1.15. auth-type: 检查request属性的值. request.getAuthType7.1.16. character-encoding: 接收到请求的编码7.1.17. content-length: 请求的长度(对于拒绝响应大请求很有用)7.1.18. content-type: 请求类型7.1.19. context-path: 请求的contex路径7.1.20. cookie: 检查cookie值, cookie的名称通过<condition />的name属性指定7.1.21. parameter: 检查请求参数, 参数名称通过<condition />的name属性指定7.1.22. path-info: 相当于request.getPathInfo()7.1.23. path-translated: 相当于request.getTranslated()7.1.24. protocol: 用于过滤协议7.1.25. query-string: 得到url后面的参数字符串7.1.26. remote-addr: IP地址过滤7.1.27. remote-host: 远程主机过滤(注意, 仅仅在应用服务器配置了查看(远程)主机名时才可用)7.1.28. remote-user: 当前登录用户, 如果用户被授权可用7.1.29. requested-session-id: 当前session的id7.1.30. request-uri: 请求URL的从协议名到查询字符串部分7.1.31. request-url: 重构后的URL, 返回的URL包含协议, 服务器名称, 端口,路径, 但不包含查询字符串7.1.32. session-attribute: 检查session中的属性(getAttribute), 属性名称通过<condition />的name属性设置.7.1.33. session-isnew: 检查session是不是新的7.1.34. server-name: 请求发送到的服务器的主机名(从host这个头中得到的不是机器名)7.1.35. scheme: 请求的scheme7.1.36. user-in-role: 注意, 这里的值不能是正则表达式7.2. name: 配合一些特殊type使用的, 可以是任何值7.3. next:7.3.1. and: 默认. 下一个和这一个条件都必须匹配7.3.2. or: 下一个或这一个条件匹配7.4. operator:7.4.1. equal: 默认. 指定正则和真实值匹配7.4.2. notequal: 真实值和正则不匹配7.4.3. greater: 大于, 仅用于数值7.4.4. less: 小于7.4.5. greaterorequal: 大于等于7.4.6. lessorequal: 小于等于8. <from />: 通常在<rule />和<outbound-rule />中都必须指定一个, 值可以是正则表达式(Perl5方式的正则), 注意: from指定的url是和contex相关的8.1. casesensitive:8.1.1. false: 默认. 大小写不敏感8.1.2. true: 大小写敏感9. <to />: 可以是一个perl5样式的正则替换表达式9.1. type:9.1.1. forward: 默认. 请求匹配这个<rule />的所有<condition />, 并且URL使用内部跳转到”to”指定的地址(注意, 这里forward到的URL必须和UrlRewriteFilter位于同一个容器中)9.1.2. passthrough: 和forward相同9.1.3. redirect: 请求匹配所有<condition />和这个<rule />的<from />, 通知客户端跳转到<to />指定地址9.1.4. permanent-redirect: 相当于做了以下事情response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);response.setHeader(“Location”, [<to />指定的值]);9.1.5. temporary-redirect: 相当于做了以下事情response.setStatus(HttpServletResponse. SC_MOVED_TEMPORARILY);response.setHeader(“Location”, [<to />指定的值]);9.1.6. pre-include9.1.7. post-include9.1.8. proxy: 请求URL将会以全路径被代理, 使用此特性需要引入commons-http和commons-codec包9.2. last:9.2.1. false: 默认. 其余<rule />将会处理如果这个匹配9.2.2. true: 如果匹配这个规则将不会处理9.3. encode:9.3.1. false: <rule />下是默认值. 在rewrite之前, 用response.encodeURL([to的值])编码URL9.3.2. true: <outbound-rule />下默认值. 不会编码URL9.4. context:如果应用服务器配置了允许”穿透context”通信, 那么这个属性可以被用于forward(并且仅仅能用于forward)请求到另外一个serlve t context…..也就是跨应用forward在Tomcat上, server.xml或context.xml中配置crossContext=”true”, 例如: 允许两个应用”app”和”forum”之间通信, 那么可以如下配置:<Context docBase=”app” path=”/app” reloadable=”true” crossContext=”true” /><Context docBase=”forum” path=”/forum” reloadable=”true” crossContext=”true” />10. <to />的其他方面10.1. <to />可以是null, 意义为: 如果匹配请求不再继续, 相当于没有调用chain.doFilter10.2. 使用$N获取<from />中配置的子组, N必须是1至10之间的数10.3. 任何<condition />中可以使用的type中的值都可以在<to />中使用, 比如<to>/%{parameter:page}</to>11.1. type:11.1.1. request: 默认. 类似于request.setAttribute11.1.2. session: session.setAttribute11.1.3. response-header: response.setHeader11.1.4. cookie: 值以”[value][:domain[:lifetime[:path]]]”的格式设置. 是指给客户端浏览器设置cookie, cookie名称由<set />的name属性指定11.1.4.1. value: cookie的值11.1.4.2. domain: 服务器11.1.4.3. lifetime: 存货时间11.1.4.4. path: cookie的path11.1.5. status: response.setStatus11.1.6. content-type: response.setContentType11.1.7. charset: response.setCharacterEncoding11.1.8. expires: 设置HTTP头中的过期时间, 设置的格式为{数值类型}, 比如: “1 day 2 seconds”11.1.9. locale: response.setLocale11.1.10. parameter: 允许将request.getParameter得到的某个参数的值在这里进行重新处理11.1.11. method: 允许将request.getMethod()得到的值进行重新处理11.2. name: type是request, session, response-header, cookie的时候, 必须设置name11.3. 举例:<rule><condition name=”user-agent”>Mozilla/3\.0 (compatible;AvantGo .*)</condition><from>.*</from><set name=”client”>A vantGo</set></rule><rule><condition name=”user-agent”>UP\.Browser/3.*SC03 .*</condition><from>.*</from><set name=”client”>Samsung SCH-6100</set></rule>12. <run />: 允许在<rule />和<condition />都匹配的时候, 执行一个对象方法12.1. class: 全限定名的类名, 期望调用方法的类名.12.2. method(可选): 默认值为run. 期望调用的方法名. 该方法必须有两个参数(HttpServletRequest request, HttpServletResponse response). 注意, 如果该对象有init(ServletConfig)或destroy()方法, 在创建和销毁对象的时候会自动调用, ServletConfig中可以得到初始化参数, 参数通过<init-param />的方式传递:<run class=”selfimpr.MyServlet” method=”doGet”><init-param><param-name>id</param-name><param-value>1</param-value></init-param></run>12.3. neweachtime: 默认false. 表明是否每次请求都创建一个对象实例.13. Tip13.1. 在配置中如果要使用”&”, 用&amp;13.2. 简单起见, 给<from />的配置前面和后面分别加上^, $, 这两个是正则表达式中的强制开始和结尾标志13.3. 如果使用<outbound-rule>要记得代码中的url都是编码过的13.4. 正则表达式非常复杂灵活, 请阅读java.util.regex.Pattern中的java正则介绍13.5. 如果觉得正则难以理解, 可以使用通配符方式13.6. contex是非常重要的, 如果有一个应用的context是”/myapp”, 并且你的请求是”/myapp/somefolder/somepage.jsp”, 容器交给UrlRewriteFilter的url会是”/somefolder/somepage.jsp”, 这可能难以理解, 但是在你的<rule>和<condition>中不要包含context path, 它是容器负责处理的.14. 通配符:通配符匹配引擎可以替代正则表达式, 在<condition>和<rule>中设置match-type 是wildcard用以开启支持通配符.(或者设置default-match-type)例如:/big/url/*匹配/big/url/abc.html但是不匹配/big/url/abc/dir/或/big/url/abc//big/url/**匹配/big/url/abc.html, /big/url/abc/dir/和/big/url/abc/也可以和正则的替换一样, 每个*代表一个参数, 在<set>和<to>中用$N的方式使用6. 使用mod-rewrite样式的配置filter配置<filter><filter-name>UrlRewriteFilter</filter-name><filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> <!-- defaults to false. use mod_rewrite style configuration file (if this is true and confPathis not specified confPath will be set to /WEB-INF/.htaccess) --><init-param><param-name>modRewriteConfText</param-name><param-value><![CDATA[# redirect mozilla to another areaRewriteCond %{HTTP_USER_AGENT} ^Mozilla.*RewriteRule^/no-moz-here$ /homepage.max.html [L]]]></param-value></init-param></filter><filter-mapping><filter-name>UrlRewriteFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping>7. WEB-INF/.htaccess下的具体匹配配置# redirect mozilla to another areaRewriteCond %{HTTP_USER_AGENT} ^Mozilla.*RewriteRule ^/no-moz-here$ /homepage.max.html [L] 8. URL注解匹配1. urlrewrite3.0之后, 使用JDK1.6及以上可以使用注解来生成urlrewrite的配置文件.9.经验分享:在Java web服务器内使用url rewrite每个网页或请求都是一个url地址,一般,这个地址可能是.do,.page,.action之类的并加上'?'号、'&'号查询串等构成的一个长长的的url。

URL重写与URL路由

URL重写与URL路由

URL重写与URL路由要介绍这两个内容,必须要从管线说起。

管线管线(Pipeline)这个词形象地说明了每个请求的处理过程:请求是在⼀个管道中,要经过⼀系列的过程点,这些过程点连接起来也就形成⼀条线。

这些⼀系列的过程点,其实就是由HttpApplication引发的⼀系列事件,通常可以由HttpModule 来订阅,也可以在Global.asax中订阅,这⼀系列的事件也就构成了⼀次请求的⽣命周期。

下⾯通过两张图⽚来详细说明⼀下请求的过程第⼀张图,主要展⽰:请求的过程从上⾯的图中,我们可以看出1.请求先交给HttpModule处理,然后由HttpModule交给HttpHandler,最后再由HttpHandler交回给HttpModule,由HttpModule结束请求。

2.Session的有效期,只有在HttpHandler处理时有效。

HttpModule处理时,都是⽆效的。

3.整个过程由⼀系列的事件组成,这点正应验了前⾯对管线的定义。

第⼆张图,主要说明:管线中所有事件的意义注意:这是iis7的处理过程,其中多了LogRequest与PostLogRequest这两个事件。

iis6的处理过程并没有这两个事件。

对于各个事件的含义,我想图⽚已经解释的很清楚了。

下⾯通过⼀个案例,来讲解⼀下本篇博客的主题。

URL重写中⼼思想:将请求的url重写成服务器可以处理的url形式。

然后由服务器根据重写后的url,查找出可以处理重写后的url的Handler,最后由Handler对其进⾏处理。

思路:2.编写⾃定义Module:IHttpModule,检测url是否是需要重写的url,如果是重写url。

由管线根据重写后的url来寻找对应的Handler对其进⾏处理。

3.编写⾃定义Handler:IHttpHandler,来处理重写后的url。

步骤:1.编写⾃定义Moduleusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Web;namespace Service{///<summary>/// url重写Module///</summary>internal class UrlRewriteModule : IHttpModule* 为了演⽰简单,直接写死地址* 这⾥我写了两个url,⼀个从虚拟路径的根路径重写(我本机的虚拟路径是/Web);另⼀个从url的末尾处重写* 具体⽤哪个url,根据需求。

UrlRewritingNet完美实现.NETURL重写

UrlRewritingNet完美实现.NETURL重写

UrlRewritingNet完美实现.NETURL重写URL重写好处有很多,如有利于SEO、便于记忆、隐藏真实路径使安全性提高、便于更新等等。

本文概要描述了各种URL重写的实现。

2.0 中实现URL重写有很多方法,如:Global.asax中捕获用Application_BeginRequest请求,再用HttpContext类的Rewrite方法或Server.Transfer方法实现重写;自己实现IHttpModule实现重写;还有的利用服务器的404错误引导到新的页面实现重写;最后就是用组件实现重写(基本原理大多也是实现IHttpModule、IHttpHandler接口处理请求)。

如果自己处理请求,实现起来麻烦,特别是在大项目中,做好使用组件实现。

网上有很多开源或免费的实现URL重写的组件,选择余地特别大。

当初我选择的标准是小巧、快速、实现常用的URL重写功能。

经过比较选择了只有32KB大小的UrlRewritingNet。

查看其文档主要功能有以下一些:1.基于正则表达式的重写2.支持Themes和母版页3.支持输出缓存4.支持信任级别为"Medium"的使用环境5.支持Postback6.支持无Cookie的Session7.运行时添加、修改改写规则8.容易安装使用OK!功能完全够用,就选他了!(本系统使用的是支持.html的方法,即第二种配置)Web.config中的配置:<configuration><configSections><section name="urlrewritingnet"requirePermission ="false"type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" /></configSections><urlrewritingnetrewriteOnlyVirtualUrls="true"contextItemsPrefix="QueryString"defaultPage = "Default.aspx"defaultProvider="RegEx"xmlns="" ><rewrites><add name="RewritePhoto" virtualUrl="^~/(\d+).aspx"rewriteUrlParameter="ExcludeFromClientQueryString"destinationUrl="~/Default.aspx?ID=$1"ignoreCase="true" /><!--更多重写规则--></rewrites></urlrewritingnet><appSettings/><connectionStrings/><system.web><httpModules><add name="UrlRewriteModule"type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" /></httpModules><!--设置 compilation debug="true" 将调试符号插入已编译的页面中。

使用重写url机制实现验证码换一张功能

使用重写url机制实现验证码换一张功能

使⽤重写url机制实现验证码换⼀张功能重写URL机制:为了保证⼀个url的地址唯⼀,可每次向服务器传递的参数不⼀样即可。

由数据请求的抱头信息可分析到:抱头信息包括http协议,IP地址,端⼝号,⼯程名,请求参数列表,要想访问的资源不发⽣变化,只能变化参数连表。

此处在实现验证码的换⼀张的功能时,就是利⽤了改变参数列表的值进⾏刷新。

详细代码实现:<%@page import="javax.imageio.ImageIO"%><%@page import="java.awt.Font"%><%@page import="java.awt.Color"%><%@page import="java.awt.Graphics"%><%@page import="java.awt.image.BufferedImage"%><%@ page contentType="image/jpeg" language="java" import="java.util.*" pageEncoding="UTF-8"%><%int w=100;int h=30;BufferedImage bi=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);Graphics g=bi.getGraphics();Color c=g.getColor();Font f=g.getFont();Random r=new Random();Color bg=new Color(150+r.nextInt(100),150+r.nextInt(100),150+r.nextInt(100));g.setColor(bg);g.fillRect(0, 0, w, h);String code="";for(int i=1;i<=4;i++){int num=r.nextInt(10);code=code+num;Color num_c=new Color(r.nextInt(150),r.nextInt(150),r.nextInt(150));g.setColor(num_c);g.drawString(String.valueOf(num), 20*i, h/2);}request.getSession().setAttribute("code", code);//清空缓存response.setHeader("pragma", "bo-cache");response.setHeader("cache-control", "bo-cache");response.addDateHeader("expires", 0);ImageIO.write(bi, "jpeg", response.getOutputStream());out.close();%>添加登录页⾯:<%@ page contentType="text/html; charset=utf-8" language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>" rel="external nofollow" ><title>My JSP 'login.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" >--><script type="text/javascript">function changeimage(){var d=new Date();//⽣成时间戳,document.getElementById("img").src="image.jsp?t="+d;//由变化的时间使参数连表发⽣变化,url重写}</script></head><body><font color="red">${requestScope.msg }</font><form action="loginServlet" method="post">name:<input type="text" name="uname"><br>pwd:<input type="pwd" name="upwd"><br>code:<input type="text" name="code" size="5"><img id="img" alt="" src="image.jsp "><a onclick="changeimage()">换⼀张</a><br><input type="submit" ></form></body></html>利⽤时间的变化,每次⽣成时间戳,传参给请求的url,达到重写url的⽬的,从⽽实现了换⼀张的刷新功能。

UrlRewrite代替apache实现jsp页面伪静态化_凌风_

UrlRewrite代替apache实现jsp页面伪静态化_凌风_

Url Rewrite Filter 是一个基于java的url rewirte开源项目,功能类似Apache中的rewrite模块。

其实,Url Rewrite让apache来负责才是最好的选择,因为mod_rewrite 已经很成熟了,功能或者效率上都更好用,apache已足以使urlrewrite的功能透明了,对于多个应用使用起来更方便。

这篇文章介绍的urlrewrite filter只是给那些不打算使用apache的应用提供了另外一种选择。

一、主要功能a) 实现url地址的伪静态化例如可以把http://localhost:8080/myindex.do?method=listIndex&user=ezplus的请求重定向或转发到http://localhost:8080/blog/ezplus,这样做就避免了url中出现?&之类的符号,而且页面伪静态化之后也增加了被搜索引擎找到的概率。

b) 根据配置文件自动转化页面上的连接在写页面的时候程序员不用关心在页面中出现的url地址将被如何伪静态化,例如,程序员还是可以在写页面的时候使用http://localhost:8080/myindex.do?method=listIndex&user=ezplus,通过在urlrewrite.xml中配置<outbound-rule></outbound-rule>,既可以实现页面url地址自动转化为伪静态化后的地址,用户在查看页面源码的时候原http://localhost:8080/blog/ezplus将被自动替换为http://localhost:8080/blog/ezplus二、安装使用1.下载地址:下载的文件(Binary的)结构简单:urlrewrite.xml和lib文件夹下的一个.jar2.jar文件放入项目的lib库中,urlrewrite.xml和web.xml放在一块。

重写url必须掌握正则表达式url重写

重写url必须掌握正则表达式url重写

重写url必须掌握正则表达式url重写重写url必须掌握正则表达式url重写2011-01-20 21:53入门简介简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。

我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。

此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。

由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。

正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。

如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。

由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。

基本语法在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。

正则表达式的形式一般如下:/love/其中位于"/"定界符之间的部分就是将要在目标对象中进行匹配的模式。

用户只要把希望查找匹配对象的模式内容放入"/"定界符之间即可。

为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的"元字符"。

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

较为常用的元字符包括:"+","*",以及"?"。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

是否看到别人的网站网址名都不带后缀名比较酷,比如qq空间的地址,其实用urlrewrite这个包很容易就实现了。

下面是使用说明:
1.下载urlrewrite,官方下载地址:/urlrewrite/dist/urlrewritefilter-
2.6.zip
2.解压缩文件,压缩包内文件copy到项目中(压缩包位置->项目位置):
urlrewrite-2.6.0-src/webapp/WEB-INF/lib/urlrewrite-2.6.0.jar -> WebRoot/WEB-INF/lib/urlrewrite-2.6.0.jar
urlrewrite-2.6.0-src/webapp/WEB-INF/urlrewrite.xml -> WebRoot/WEB-INF/urlrewrite.xml
3.将以下代码添加到web.xml里
<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>
4.修改urlrewrite.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-////DTD UrlRewrite 2.6//EN"
"/res/dtds/urlrewrite2.6.dtd">
<!-- Configuration file for UrlRewriteFilter /urlrewrite/ -->
<urlrewrite>
<rule>
<from>^/([a-z]+)$</from>
<to type= "forward" >/world.jsp?id=$1</to>
</rule>
<rule>
<from>^/world/(.*)$</from>
<to>/world.jsp?tid=$1</to>
</rule>
<rule>
<from>^/(.*).html$</from>
<to>/test1/$1.jsp</to>
</rule>
<outbound-rule>
<note>
The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
the url /rewrite-status will be rewritten to /test/status/.
The above rule and this outbound-rule means that end users should never see the
url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
in your pages.
</note>
<from>/rewrite-status</from>
<to>/test/status/</to>
</outbound-rule>
</urlrewrite>
rule是url重写规则,from是显示出来的地址,to是映射的实际地址,$1是重写参数,可以为多个,()里是匹配的正则表达
式.
好了,在项目中新建world.jsp,启动tomcat,输入
http://localhost:8080/mysite/world/1
mysite是你的项目名
实际上访问的是http://localhost:8080/mysite/world.jsp?tid=1 这样就简单的实现了伪静态的效果。

相关文档
最新文档