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
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
虽然这样效率比较低,要重定向一次,但也比因为用户少打了一个/而无法访问要强。
欢迎补充、批评、指正。