现在的位置: 首页 > 综合 > 正文

关于Server.Transfer(URL)和UrlReWrite的一个突发奇想

2012年12月11日 ⁄ 综合 ⁄ 共 1024字 ⁄ 字号 评论关闭

最近DV上有人提到Server.Transfer(Url),突然想到经常有人问的关于UrlReWrite地址映射技术,如果条件允许的话,Server.Transfer也能做一个假的地址映射

前提是主机要支持自定义404错误,否则下边的你不用看了!

按此在新窗口打开图片

假设我使用一个静态地址来访问我的某个页面,如:http://blog.goalercn.com/article/100.html(其实这个地址所对应的页面根本就不存在,因此就会自动显示404.asp页的内容),而实际显示的是http://blog.goalercn.com/article/article.asp?Id=100的内容,怎么弄呢?
先配置主机的404错误页:假设为404.asp,这里要使用asp扩展名的(为了能执行ASP脚本)
在404.asp页面中,先获取当前来源页的URL,从URL里来取得我们需要的ID参数,随便用一下简单的正则或是用INSTR,MID之类的配合使用,都可以轻松取得这个ArticleID,这里我就不写了

这样我们就得到了这个文章的ID编号:ArticleID,但是这里有一个问题,Server.Transfer(Url)里的这个Url是不可以带参数的,且这个Url必须为同一服务器上的页面,因此我们就需要用Session来传递一下这个ArticleID
Session("ArticleID") = ArticleID
Server.Transfer("article.asp")

article.asp页上接收这个Session("ArticleID"),从数据库中读出这个Session("ArticleID")相应的文章数据

有点投机取巧的意思 ,大概这么说一下我想都能明白了吧,不明白的人我也不说了

声明一下:我没有测试,虽然偶的服务器支持这些东西,但偶懒得去弄,确实没什么意思。有没有错误我也不知道,有错请指正!

补充:还是写一下吧
Dim PageUrl,ArticleID
PageUrl= Request.ServerVariables("URL")
Dim regExp
Set regExp = New RegExp
regExp.IgnoreCase = True
regExp.Global = True

RegExp.Pattern="/article/([\s\S]*?).html"
ArticleID=RegExp.Replace(PageUrl,"$1")
SET regExp=Nothing

抱歉!评论已关闭.