zoukankan      html  css  js  c++  java
  • 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
    虽然这样效率比较低,要重定向一次,但也比因为用户少打了一个/而无法访问要强。

    欢迎补充、批评、指正。

    ---------------------------

    http://www.cnblogs.com/squirrel_sc

    1. 如有引用,请包含本段文字及原始出处。以表示对作者的尊重,且能将有相似想法的人联系起来。

    2. 如无特殊说明,本文的文字代表作者的观点和想法。由于人类的记忆和连通性的限制,可能会将别人的观点和想法当成自己的(会尽量避免,但我读书少,别蒙我:D);或有人会有同样的想法(那就太好了)。若有此类情况,请联系我。我会很高兴更新内容。

    3. 每篇文章会根据反馈或新的想法,随时更新。我会尽量记得更新版本号。

  • 相关阅读:
    FastJson中JSONObject用法
    复盘项目模板
    java Enum 类型
    Java List集合总结
    Spring boot 使用Slf4j 日志
    java.lang.reflect.UndeclaredThrowableException
    Intellij IDEA 中使用 Debug
    Java 13位时间戳转换日期格式
    Java 时间格式转换
    Spring boot 自定义注解
  • 原文地址:https://www.cnblogs.com/squirrel_sc/p/46553.html
Copyright © 2011-2022 走看看