asp.net用url重写URLReWriter实现任意二级域名

来源:互联网 发布:php strstr函数用法 编辑:程序博客网 时间:2024/05/17 08:42
 

Asp.net 用url重写(URLReWriter)实现任意二级域名

好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑.

来找这篇文章的,应该都知道什么叫二级域名吧,废话就不说了.但是讨论前,先要明白一个思想问题.
很多朋友一直考虑不清(我前几天也一直搞不明白)的问题是,我键入一个地址后,怎么这个url就被重写了?
第一步:在浏览器键入了一个地址,比如http://love.kerry.com,点回车后,都发生了什么?
为了把问题简单化,我来这样解释:
第二步:首先,键入的地址被解析,最终来到了一台web服务器.交给IIS处理.在.net的世界中,IIS会把这样的请求再交给一个web处理器 处理,最后,该 web处理器 把处理的结果返回给浏览器,显示给用户看.
请不用忽略这样一个问题,第二步的所有事情都是在服务器端做的.在这些事情进行的时候,用户端的浏览器上面的地址不会改变.即使最后 web处理器 把处理结果返回来的时候,上面的地址也不会改变.
一开始键入的url,只是起一个敲门的作用,门敲完了,作用就算结束了,只有你的眼睛可以看到那个地址,浏览器,服务器等都不知道这个地址.
然后要明白的问题是,所谓url重写,也只是web开发人员知道的内幕情况,用户根本不知道发生了什么,他认为自己键入的地址就是应该出来屏幕上显示的结果.也就是说,我们在幕后控制要显示的内容.
接下来要考虑的是,怎么样控制显示的内容?
从上面说的过程,很明显要在 web处理器 的工作这一步动手脚.

一个最简单的考虑是,用户敲入了一个简单的不带任何参数地址, http://love.kerry.com然后我们把这个地址改成一个符合程序需要的带参数的地址, http://kerry.com?lover=notus,最后处理之.
所谓的url重写,就是在这一步.
用.net的术语来说,我们需要给应用程序注册一个httpmodule,用来处理特定的url
注册httpmodule,在web.config,
处理url,在我们提供的httpmodule程序中

大体相当于这样的一段程序

//用我们的httpmodule程序截获原始url
String OriginalUrl=” http://love.kerry.com”;
//处理原始url,得到最后需要的url,值为http://kerry.com?lover=notus
String FinalUrl=Rewrite(OriginalUrl);
// context重新将url在内部发送给IIS处理
context.RewritePath(FinalUrl);

接下来,我们来实现url重写.
第一步:确定要对哪些url执行重写,即制定重写规则
第二步:编写httpmodule处理程序
第三步:将编写的httpmodule整合入web程序,开始工作.

上面就是url重写的基本知识,而用url重写实现二级域名,过程一样.因为无论是二级域名还是三级域名,都是一个url地址.只要我们截获这个url地址,就可以在处理的时候动手脚.

这些工作挺麻烦,但是网络上已经有高人给我们写了这样的程序,参看下面的文章:

http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

http://www.cnblogs.com/jzywh/archive/2005/09/29/246650.html

http://www.cnblogs.com/jzywh/archive/2006/02/20/334004.html

文章结束了.

在实施过程中会碰到一些问题,大多是因为看上面的文章不仔细产生的,但是说实话,那么长的文章要看完也不容易.下面我来记录一些重要的问题.其中最后的两个问题,用具体的代码展示了如何处理重写的目标url以达到我们的要求

为什么非要用泛解析?
看了好多朋友的回复,我想现在可能有这样的误解,即,这篇关于url重写的文章只是给大家介绍一些处理方法.至于泛解析不泛解析,并不重要.
如果你不需要实现任意二级域名,那就用不着去实现泛解析,直接把你需要的二级域名定死,然后在url重写里处理好了!
 再退一步,如果连二级域名都不用实现,仅仅是对一个固定域名下的url进行重写,那都不需要修改msdn的那个urlrewriter,直接拿来用就可以实现了简单的url重写. zyw对这个项目进行的修改,只是为了取到全部的url进行更大限度的控制.而如我们所见,一开始msdn的那个urlrewriter并不关心域名的问题
我一开始给文章起这样的题目,是因为最近我项目里用到了,写文档的时候顺便就把这个文章写了



微软的URLRewriter是什么?这个项目在哪里下载的?
这个是在msdn上一篇介绍URLRewriter的文章中提供的示例程序,可以在这里下载到
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx


怎么使用这些代码?麻烦吗?
肯定的说,不麻烦,要做的事情有:
下载代码到你的机器上.
安装后,把URLRewriter这个项目添加到你自己的工程中
按照上面给的地址里的方法,修改代码
配置web.config,开始使用.


什么是httpmodule?

简单理解,就是一块处理http请求的程序
更详细的理解,请查阅sdk文档.


怎么样实现泛解析?

首先,在域名服务商那里添加一个*.kerry.com的二级域名,指向你的服务器ip
然后,在IIS里建立一个站点,这个站点的主机头留空,一般端口是80. 这个站点就是整个服务器端口80的默认网站.
给这个站点添加一个通配符应用程序映射(IIS站点属性 ->主目录 ->  配置),这个映射的目的是要asp.net ISAPI接管任何没有在IIS里明确的二级域名站点.


随便输入二级域名的时候,发生了什么?
当IIS检测到传入的url是一个二级域名的时候,它会先检查IIS上有没有注册了这个二级域名的站点,如果有,就转入到这个站点,否则,就会转到默认站点,这个默认站点就是之前配置的主机头为空的那个站点.所以,一个端口只能有一个主机头为空的站点.
我们已经设定由asp.net ISAPI接管这些没有家的孩子.写程序,分析传入的url,执行重写.


为什么我的httpmodule好像没有起作用?

在httpmodule程序里设置断点后,无论怎么样,流程都没有从这里走.原因在于,你没有向web程序注册你的httpmodule程序.这个工作需要在web.config中完成.
<system.web>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter"  name="ModuleRewriter" />
</httpModules>
</system.web>


为什么总是提示我”未知的配置节RewriterConfig错误”

这是因为你没有向web程序注册你的RewriterConfig配置节. 这个工作需要在web.config中完成.
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
然后,你可以在<configuration>里使用RewriterConfig节配置规则了.


url是在httpmodule的哪个部分处理的?

大多的工作是在URLRewriter. ModuleRewriter. Rewrite()方法里.关键阶段是这里:
if (re.IsMatch(requestedPath))
很明显,这个判断传入的url是否是我们要重写的url,大家接着看,
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));
这里接受到web.config中配置的要转到的目标url
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
在内部把url重写.


我不想把二级域名写死在web.config中,而且我要重写的目标url也不能写死.比如我们有这样的需要
Love.kerry.com实际的处理页面是kerry.com/action.aspx?id=1
call.kerryl.com实际的处理页面是kerry.com/action.aspx?id=2
walkwith.kerry.com实际的处理页面是kerry.com/walk.aspx
要怎么处理?


这个时候,就需要在上面说的那几个代码里做手脚.
if (re.IsMatch(requestedPath))
{

//找到url里的二级域名
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];

//根据需要设定要重写的目标url
string sendToUrl ;
if(domain2==” Love”)
  sendToUrl =” /action.aspx?id=1”;
else if(domain2==” call”)
  sendToUrl =” /action.aspx?id=2”;
else i f(domain2==” walkwith”)
  sendToUrl =” /walk.aspx”;

RewriterUtils.RewriteUrl(app.Context, sendToUrl);
    
}

在web.config里配置规则的时候,需要这样
<RewriterRule>
<LookFor>http://(/w+)/.kerry/.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(/w+)用来匹配任意字符串
这里的test.aspx随便写别的也可以,因为我们根本没有用它.


我有好多不确定二级域名的站点,但是每个站点的页面确定,每个二级域名站点的内容实际上根剧不同的id从数据库调,
情况如这样
http://localhost/kerry/action.aspx?id=1 love.kerry.com/walk.aspx

http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx

现在传上去,不能显示id参数,都改成二级域名的方式. 这个时候该怎么办?

首先配置规则
<RewriterRule>
<LookFor>http://(/w+)/.kerry /.com/ walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
然后在程序里这样处理
//获取二级域名
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
根据域名获得不同的编号
int id=getIDfromDomain(domain2);
//获得要转向的基本url
 string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));
//加上id参数
if(id>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
else
    sendToUrl=”error.aspx”;
//重写
RewriterUtils.RewriteUrl(app.Context, sendToUrl);


如何匹配目录?写了一个lookfor规则 http://love.kerry.com/,但是在浏览器输入这个地址, 总是不能正确的重写,经过trace后发现根本不能匹配,为什么?

首先,我们应该知道,浏览器实际上接受的不是http://love.kerry.com/,而是http://love.kerry.com/default.aspx ,因此,你的</LookFor>规则应该这样写
<LookFor>
http://love.kerry.com/default.aspx
</LookFor>
这个default.aspx应该是你在iis里配置的默认文档,如果你的是index.aspx或其他奇怪的名字,就写成你自己的名字
同样, http://love.kerry.com/fun  这个地址要匹配,需要这样的规则http://love.kerry.com/fun/default.aspx
但是,再罗嗦一句,你的文件根本不需要有fun这个目录,因为...重写了嘛


我搜到网上还有另外一种解决办法…

或许你是指这篇文章

http://blog.csdn.net/mengyao/archive/2007/01/25/1493537.aspx

大家可以看到,其基本的方法都是一样的.之所以没有把这个列在最前面,是因为这个做法有些取巧,可能一开始不是那么好理解.但是我相信看到最后的朋友再看这篇文章,应该都会会心的一笑
Happy programming 


最后ps:本来准备过几天发这个文章,就在刚才,不小心从VSS把这几天写的程序都删除了,还是彻底型的,再次强烈的鄙视微软做的这个垃圾源码管理器 -_-

posted on 2007-03-13 15:58 Notus|南色的风 阅读(8326) 评论(48)  编辑 收藏 所属分类: Happy Programming

评论:
#1楼  2007-03-13 16:15 | yunhuasheng      
Very Good!
  回复  引用  查看    
#2楼  2007-03-13 16:27 | jector      
ISAPI+正则式比较方便!
  回复  引用  查看    
#3楼  2007-03-13 16:50 | roydu [未注册用户]
关键在 泛解析 吧?
  回复  引用    
#4楼  2007-03-13 17:14 | 大豆男生      
不错
  回复  引用  查看    
#5楼  2007-03-13 17:39 | JesseZhao      
ISAPI仿佛对用虚拟主机的兄弟不太方便啊
我用了newdong.com的虚拟空间,在自己机器上面好好的URLReWriter,可是到了那上面直接找不到了,郁闷的很啊。
  回复  引用  查看    
#6楼 [楼主] 2007-03-13 17:56 | Notus      
虚拟主机的话,只能做到对已经解析的二级域名重写,而不能实现泛解析了.
因为没有环境测试,所以也不知道这个想法对不对.但我觉得大概是这样的吧,汗
  回复  引用  查看    
#7楼  2007-03-13 19:15 | YAO.NET℡      
关键点在泛解析。

这样就算使用asp都可以实现二级域名了。


  回复  引用  查看    
#8楼  2007-03-13 19:38 | Wisdom-zh      
@JesseZhao
没错
  回复  引用  查看    
#9楼  2007-03-13 19:52 | 茄子 [未注册用户]
不错,
我的项目已经用到了。
  回复  引用    
#10楼  2007-03-13 20:31 | reonlyrun      
果真不是一般的乱。。。
  回复  引用  查看    
#11楼  2007-03-13 21:53 | notus [未注册用户]
泛解析确实很重要,这个也只有在服务器才能配置。
但是把无头的二级域名截获后,怎么处理,也是要考虑的重点,这个依据使用的语言不同,方法可能也不同了。
  回复  引用    
#12楼  2007-03-13 21:59 | binking [未注册用户]
@Notus
老兄,你没有测试就发上了呀!艺高人胆大!!

  回复  引用    
#13楼  2007-03-13 22:08 | JesseZhao      
呵呵
  回复  引用  查看    
#14楼 [楼主] 2007-03-14 08:42 | Notus      
to binking
我是说在虚拟主机是否可以这个事情上没有测试过,但是我在服务器上已经测试并运行着了 :)
  回复  引用  查看    
#15楼  2007-03-14 09:21 | deerchao      
如果你的域名提供商不支持泛解析,试试把DNS任务放到免费的ZoneEdit吧(只要请求量小于一定的数值就是免费的),我已经用了一年了,非常稳定,而且对域名解析的修改几乎是实时生效的。
地址http://www.zoneedit.com,一般人我不告诉他。
  回复  引用  查看    
#16楼  2007-03-14 09:43 | 亚历山大同志      
我的域名提供商不支持泛解析,郁闷死洒家了
  回复  引用  查看    
#17楼 [楼主] 2007-03-14 10:06 | Notus      
为什么非要用泛解析?
看了好多朋友的回复,我想现在可能有这样的误解,即,这篇关于url重写的文章只是给大家介绍一些处理方法.至于泛解析不泛解析,并不重要.
如果你不需要实现任意二级域名,那就用不着去实现泛解析,直接把你需要的二级域名定死,然后在url重写里处理好了!
再退一步,如果连二级域名都不用实现,仅仅是对一个固定域名下的url进行重写,那都不需要修改msdn的那个urlrewriter,直接拿来用就可以实现了简单的url重写. zyw对这个项目进行的修改,只是为了取到全部的url进行更大限度的控制.而如我们所见,一开始msdn的那个urlrewriter并不关心域名的问题
我一开始给文章起这样的题目,是因为最近我项目里用到了,写文档的时候顺便就把这个文章写了

  回复  引用  查看    
#18楼  2007-03-14 10:08 | 金色海洋(jyk)      
好像大家遇到的都是一些比较简单的二级域名重写

我的这个就比较麻烦一些了

比如:

http://sc.1380000.com/Album --> /sc/Album.aspx
http://sc.1380000.com/Album/200701011.htm --> /sc/bb.aspx?id=1

http://zs.1380000.com/FAQ --> /zs/a.aspx?id=1
http://zs.1380000.com/ZhiShi --> /zs/a.aspx?id=2

类似的还有好几个呢。

而且不止这一个域名要泛解析,还有好几个域名也要泛解析的,郁闷的是只有一个IP地址。

  回复  引用  查看    
#19楼 [楼主] 2007-03-14 10:13 | Notus      
楼上的问题确实比较麻烦,方便一些的做法就是在webconfig里写好各种过虑规则,然后分门别类的来处理了
这个时候,技巧固然重要,更重要的是细心了

其实我上面的代码只是举个例子,我项目中的重写,也是很麻烦的,甚至需要到数据库里查东西然后返回来再确定转到哪里-_-

美其名曰:为了更好的用户体验
  回复  引用  查看    
#20楼  2007-03-15 09:14 | 喝酒的猫      
留名!
  回复  引用  查看    
#21楼  2007-03-31 19:06 | bullion      
您好,我用了您的方法,本地可以,但是传到服务器不行呀!
我想实现的功能很简单, 就是http://blog.test.com/bullion, 而blog.test.com是二级域名,域名商分配的,这个是死的,就是改后面部分, 传到服务器访问http://blog.test.com/bullion就是不行呀, 提示找不到页面, 这是为什么呢?? 多谢指教了....
  回复  引用  查看    
#22楼  2007-03-31 22:09 | notus [未注册用户]
找不到页,这个实际上它认为你有一个bullion的目录它去找默认文档了,如果你这个是假的,那肯定不行

假设你的默认文档是default.aspx,那你的匹配规则应该这样写
<LookFor>
http://blog.test.com/bullion/default.aspx</LookFor>

这样,输入http://blog.test.com/bullion时候,就会进入到匹配规则里,然后处理
  回复  引用    
#23楼  2007-03-31 22:22 | bullion      
@notus

我配置文件里是这样实现的
<LookFor>~/(/w{0,20})</LookFor>
<SendTo>~/members/default.aspx?memid=$1</SendTo>

是不是我这种写法有问题呢???

我试了这个方法
<LookFor>http://blog.espnstar.com.cn/(/w{0,20})</LookFor>
<SendTo>http://blog.espnstar.com.cn/members/default.aspx?memid=$1</SendTo>

还是不行啊...
  回复  引用  查看    
#24楼 [楼主] 2007-03-31 23:15 | Notus      
兄弟,你要这么写才行啊
http://blog.test.com/bullion/default.aspx
  回复  引用  查看    
#25楼  2007-03-31 23:35 | bullion      
不是这样吧, 不用正则的话,怎么获取参数呀, 哈哈
  回复  引用  查看    
#26楼  2007-04-01 00:13 | bullion      
@Notus
请问您是怎么实现的呢
  回复  引用  查看    
#27楼 [楼主] 2007-04-01 19:59 | Notus      
兄弟,你有没有看我的回复啊 -_-
我再说一遍:
无论你怎么写,都不会匹配,因为服务器一开始去找bullion那个目录下的默认文档了。。所以要这么写
<LookFor>http://blog.test.com/bullion/default.aspx</LookFor>

至于参数的获取,可以在url重写的程序里处理

对了,你用什么实现url重写的?httpmodule吗
  回复  引用  查看    
#28楼  2007-04-01 22:31 | bullion      
不好意思,不好意思, 哈哈, 谢谢, 谢谢!
确实是正则的问题, 这样写就可以了
<LookFor>http://blog.espnstar.com.cn/(/w{0,20})</LookFor>
<SendTo>~/members/default.aspx?memid=$1</SendTo>

  回复  引用  查看    
#29楼  2007-04-04 17:30 | yangzhijia [未注册用户]
高手,你好!
你说的把"下载代码到你的机器上.安装后,把URLRewriter这个项目添加到你自己的工程中"一定要这样吗?引用它的DLL文件行不行?

还有就是你在上面写的东西,比如(string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );string domain2=UserHost [0];) 是在哪重写?

  回复  引用    
#30楼 [楼主] 2007-04-04 17:52 | Notus      
to yangzhijia

如果你不需要重写整个url,而只是对域名后面的那些部分重写,就不需要修改,直接引用那个dll就可以。
修改那个项目,主要是为了重写整个url,来实现二级域名或其他的功能。比如上面你问的获取域名那部分,就是在这个项目里写的。
具体的位置是在URLRewriter.ModuleRewriter.Rewrite()方法里,判断url匹配了之后
if (re.IsMatch(requestedPath))
{
//处理..
}
这个的目的是为了获取二级域名,然后做下一步处理
  回复  引用  查看    
#31楼  2007-04-05 14:54 | yangzhijia [未注册用户]
@Notus
非常感谢你在百忙之中及时的回复.
我做个URL重写:
webconfig中的配置如下:
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/Page/AspNetPager/.aspx</LookFor>
<SendTo>~/admin/AspNetPager.aspx</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler,URLRewriter"/>
</httpHandlers>
我想要的结果是Page.AspNetPager.aspx但现在出现的还是admin.AspNetPager.aspx
URLRewriter 我没有修改直接应该下载的dll文件. 请问要实现我说的结果 应该如何配置?
还有如果要实现这种效果"www.BlogName.Blog.com"就是以Blog注册用户名作为二级域名 怎么实现?

期待Notus的回复 !

  回复  引用    
#32楼  2007-04-24 12:12 | s3 [未注册用户]
谁有已经可以完全二级域名解析的程序呢?

怎么园子里都写怎么实现,没一个往出放代码的。
不知道你们自己有没实现了?

有已经完全可以实现的朋友,把代码放出来看下。


  回复  引用    
#33楼  2007-04-24 15:46 | notus [未注册用户]
楼上的兄弟,如果只是想要代码,那别人的未必适合你
而且,就算直接给出代码,估计也看的很费劲

最后,我想多说一句,难道这代码给的还不够多吗?
  回复  引用    
#34楼  2007-05-16 20:59 | 百评网 [未注册用户]
文章写的很不错也容易理解
赞一个
  回复  引用    
#35楼  2007-05-17 12:25 | notus      
谢谢楼上兄弟的表扬,呵呵
好久没有写这么长的东西,所以有些乱,但还是希望可以帮到在这方面有需要的朋友
  回复  引用  查看    
#36楼  2007-05-27 23:23 | 好 [未注册用户]
写的不错啊 ,
  回复  引用    
#37楼  2007-05-30 06:37 | David [未注册用户]
我用VS2005使用AJAX为什么不执行, 没有报错,但是没有重写. 大家有经验吗?
  回复  引用    
#38楼  2007-05-31 09:11 | notus [未注册用户]
执行不执行和ajax没有关系吧?跟踪一下,看看到底有没有进入到模块中进行处理?
  回复  引用    
#39楼  2007-08-03 08:58 | looker [未注册用户]
感谢 notus 的文章!

我没写代码.
我想问下` 直接写`不写代码 这个可以重定向吗?
<LookFor>http://(/w+)/.kerry/.com</LookFor>
<SendTo>/test.aspx?id=$1</SendTo>

请作者回复` 谢了``
E-mail:idea361@gmail.com
  回复  引用    
#40楼  2007-08-03 17:38 | notus [未注册用户]
如果只是加这个,必定是不行的.这就象那个古老的笑话
dos模式下键入 "我要开机"

-_-
  回复  引用    
#41楼  2007-08-03 17:39 | notus [未注册用户]
但是这样的,我这里的这个已经是很复杂的了,如果你只是简单的应用,不需要这么麻烦,直接把那个url重写的类拿来用就可以.具体怎么用自己稍微研究下吧
  回复  引用    
#42楼  2007-08-21 08:40 | luo [未注册用户]
怎样将http://ttt.com/luo转到http://ttt.com/default?username=luo
luo是不存在的目录
  回复  引用    
#43楼  2007-12-06 00:01 | lzhshen [未注册用户]
楼主你好,在不用考虑二级域名的情况下,是可以实现域名的重写。
比如输入:http://www.soguan360.com/Clubs,
可以替换为: http://www.soguan360.com/SubClub/Club_Index.aspx?clubID=47

但是如果,设置成二级域名就不能成功,不管如何都直接显示网站主页。下面是我做二级域名时的改动:
1. 根据 http://www.cnblogs.com/jzywh/archive/2005/09/29/246650.html 来修改UrlRewrite的源代码,重新编译,然后拷贝到网站的/bin目录下
2. 修改 web.config url的重写策略如下:
<RewriterRule>
<LookFor>http://46/.soguan360/.com</LookFor>
<SendTo>~/SubClub/Club_Index.aspx?clubID=47</SendTo>
</RewriterRule>
在浏览器中输入 http://46.soguan360.com, 都不能跳转到我想要的页面,而是直接显示网站的主页。

请问这是哪里出了问题? 谢谢!


  回复  引用    
#44楼 [楼主] 2007-12-07 12:29 | Notus|南风神之剑      
我是正则菜鸟,所以你需要确认你写的那个规则是否真的可以配合这个地址http://46.soguan360.com
然后,可以在那个url重写的类里加个断点,看请求是否进入到流程了.

不能跳转的话,我猜流程是没有走到这里来

如果确实进来了,那就没有理由不重写.如果没有进来,那就看正则写对了吗?或者,这段话你试验了吗? :


首先,我们应该知道,浏览器实际上接受的不是http://love.kerry.com/default.aspx ,因此,你的</LookFor>规则应该这样写
<LookFor>
http://love.kerry.com/default.aspx
</LookFor>
这个default.aspx应该是你在iis里配置的默认文档,如果你的是index.aspx或其他奇怪的名字,就写成你自己的名字
同样, http://love.kerry.com/fun 这个地址要匹配,需要这样的规则http://love.kerry.com/fun/default.aspx
但是,再罗嗦一句,你的文件根本不需要有fun这个目录,因为...重写了嘛
  回复  引用  查看    
原创粉丝点击