URL重写的一种方案

URL重写可以让网站看上去更有条理、还可以让网站改版后的旧连接能够继续使用。
可以参考可用性专家Jakob Neilsen对URL的建议

MSDN相关参考:
中文:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
英文:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/urlrewriting.asp

考虑到简洁,为什么每个URL最后都要是aspx呢?因为如果不是aspx,就无法映射到aspnet中进行处理。想要实现将/2004/这样的目录也映射到aspnet中处理,就需要iis中的过滤器了。
我采用了http://www.qwerksoft.com/products/iisrewrite/download.asp这个过滤器。我试验了好几种,在IIS5.0下几乎都好用,到了IIS6.0下,就有问题了。如果/2004/这个目录存在,则好用,不存在则直接返回404错误。只有这个过滤器能在IIS6.0判断目录存在之前进行过滤。
我用的配置文件内容为:
RewriteEngine On
RewriteRule ([^\n]*)/ $1/Default.aspx
但这样一来,问题就出来了,这相当于屏蔽了IIS中默认页的设置,默认页只能是Default.aspx了。

进一步,如果使用/2004这个名字访问呢?因为过滤器只重写最后为/的URL,其它的无法进行判断了。我的解决方法是写一个404.aspx

    Private Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles MyBase.Load
        
Dim stemp As String = Server.UrlDecode(Request.QueryString.ToString())
        
If (stemp.Chars(stemp.Length - 1= "/"c) Then
            Server.Transfer(
"/")
        
Else
            stemp 
= stemp.Substring(stemp.IndexOf(";"+ 1)
            Response.Redirect(stemp 
& "/")
        
End If
    
End Sub

然后在IIS属性-〉自定义错误信息里将404的默认值改为消息类型:URL,URL改为:/404.aspx
虽然这样效率比较低,要重定向一次,但也比因为用户少打了一个/而无法访问要强。

欢迎补充、批评、指正。

posted @ 2004-09-25 12:57  squirrel_sc  阅读(8010)  评论(23编辑  收藏  举报