分享

写回答

发帖

[提问] ASP.ENT可以用urlrewrite么?

GoDaddy GoDaddy 1912 人阅读 | 8 人回复

发表于 2008-11-14 21:25:47 | 显示全部楼层 |阅读模式

Deluxe Plan的windows主机,IIS7,可以使用urlrewrite伪静态么?
我试过了,在本地可以伪静态,上传到空间却不行,有没有大侠做出来过?

回答|共 8 个

add.c

发表于 2008-11-15 09:48:37 | 显示全部楼层

不可以。

jearol

发表于 2008-11-17 11:30:34 | 显示全部楼层

好了,用global.asax可以实现类似 list.aspx?id=1 <==> list/1.aspx 这样的伪静态

评分

参与人数 1金币 +2 收起 理由
add.c + 2 原创内容

查看全部评分

add.c

发表于 2008-11-17 12:55:26 | 显示全部楼层

回复 3# 的帖子

请楼上提供下详细的方法

jearol

发表于 2008-11-17 13:29:50 | 显示全部楼层

上代码:

在Global.asax里添加Application_BeginRequest事件,在请求web地址时运行

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    Dim oldUrl As String = HttpContext.Current.Request.RawUrl
    pattern = "^(.+)list,(\d+)\.aspx(\?.*)*$"
    replace = "$1list.aspx?id=$2"
    If Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase) Or RegexOptions.Compiled Then
        Dim newurl As String = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled Or RegexOptions.IgnoreCase)
        Context.RewritePath(newurl)
    End If
End Sub

这样就可以实现 list,1.aspx 到 list.aspx?id=1 这样的重定向,如果需要实现的地址和参数比较多,那么就需要一个判断,根据不同的地址来重定向到不同的页面,看看我网站上的代码:
    Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
        Dim oldUrl As String = HttpContext.Current.Request.RawUrl
        If InStr(oldUrl, ",") > 0 Then
            Dim pattern As String = ""
            Dim replace As String = ""
            Select Case Right(Left(oldUrl, InStr(oldUrl, ",") - 1), Len(Left(oldUrl, InStr(oldUrl, ",") - 1)) - InStrRev(Left(oldUrl, InStr(oldUrl, ",") - 1), "/"))
                Case "tech"
                    pattern = "^(.+)tech,(\d+)\.aspx(\?.*)*$"
                    replace = "$1tech.aspx?typeid=$2"
                Case "techbrowse"
                    pattern = "^(.+)techbrowse,(\d+)\.aspx(\?.*)*$"
                    replace = "$1techbrowse.aspx?id=$2"
                Case "newsbrowse"
                    pattern = "^(.+)newsbrowse,(\d+)\.aspx(\?.*)*$"
                    replace = "$1newsbrowse.aspx?id=$2"
                Case "down"
                    pattern = "^(.+)down,(\d+)\.aspx(\?.*)*$"
                    replace = "$1down.aspx?id=$2"
            End Select
            If pattern.Length > 0 And replace.Length > 0 Then
                If Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase) Or RegexOptions.Compiled Then
                    Dim newurl As String = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled Or RegexOptions.IgnoreCase)
                    Context.RewritePath(newurl)
                End If
            End If
        End If
    End Sub

对于list.aspx?id1=1&id2=2&id3=3这样的地址,只需要写相应的正则表达式就ok了

评分

参与人数 1威望 +3 金币 +7 收起 理由
add.c + 3 + 7 原创内容

查看全部评分

jearol

发表于 2008-11-17 13:34:48 | 显示全部楼层

至于效果嘛,看看我的网站就知道了
不过我只做了程序部分,页面上的链接都没有改,想看效果的需要手动改一下地址
http://www.aspone.cn/tech.aspx?typeid=1
改成
http://www.aspone.cn/tech,1.aspx

其他页面类似

[ 本帖最后由 jearol 于 2008-11-17 01:37 PM 编辑 ]

jearol

发表于 2008-11-17 14:26:49 | 显示全部楼层

另外,如果传递的参数如果都类似
list.aspx?id=n
也就是说如果?后边的参数名称全为id,并且只传递id这么一个参数的话那么正则表达式部分就可以简单点,写成
Dim pattern As String = "^(.+)([^/]),(\d+)\.aspx(\?.*)*$"
Dim replace As String = "$1$2.aspx?id=$3"
即可

评分

参与人数 1威望 +2 收起 理由
add.c + 2

查看全部评分

add.c

发表于 2008-11-17 14:28:07 | 显示全部楼层

回复 7# 的帖子

jearol

发表于 2008-11-17 14:29:31 | 显示全部楼层

哈哈,还没完呢,还有

再补充一点对于list.aspx?id1=1&id2=2&id3=3    <==>    list,1,2,3.aspx这样的地址
Dim pattern As String = "^(.+)([^/]),(\d+),(\d+),(\d+)\.aspx(\?.*)*$"
Dim replace As String = "$1$2.aspx?id1=$3&id2=$4&id3=$5"
这样写就OK
您需要登录后才可以回帖 登录 | 注册

本版积分规则