红包
◆ [2024-4-20 星期六 13:9] ◆ 您来自:18.219.86.155,欢迎您访问風雲工作室。 收藏本站 ◆ | ◆ 设为首页
联系站长(腾讯QQ)
5029111 [風雲]
站长当前离线
首  页 论坛交流 游戏频道 无忧脚本 旧版论坛 云服务器 聊 天 室 自助链接 来访记录 访客留言 搜索提供
位置:風雲工作室 - 论坛交流 - 技术专栏 - 后台开发 - 【原创】利用asp.net的RewritePath实现“伪静态”地址重写功能 返回
主题:【原创】利用asp.net的RewritePath实现“伪静态”地址重写功能
Rimifon
★☆☆☆☆☆☆☆☆☆
积分:285
发帖:317
登录:2024/3/26
注册:2006/6/28
(1楼)【原创】利用asp.net的RewritePath实现“伪静态”地址重写功能
无需配置Web.Config,无需加加载外部dll模块。代码如下:
~/Global.asax:
<script RunAt="server" Language="C#">
void Application_BeginRequest()
{
    WebSite.UrlRewrite(new[]
    {
        new[]{ @"Ware\[(\d+)\]\.html$", "Detail.aspx?ID=$1" },
        new[]{ @"News\[(\d+)\]\.html$", "XinWen.aspx?ID=$1" }
    });
}
</script>
~/App_Code/WebSite.cs:
using System.Text.RegularExpressions;
public class WebSite
{
    public static void UrlRewrite(string[][] arrRules)
    {
        var Context =  System.Web.HttpContext.Current;
        var strUrl = Context.Request.Path;
        foreach(var rule in arrRules)
        {
            strUrl = Regex.Replace(strUrl, rule[0], rule[1],
                RegexOptions.IgnoreCase);
        }
        // 如未发现任何更改,不进行URL重写。
        if (strUrl == Context.Request.Path) return;
        // 附加重写前的相关URL参数
        var strPar = Context.Request.QueryString + "";
        if (strPar != "") strUrl += "&" + strPar;
        Context.RewritePath(strUrl);
    }
}
以上为C#3.5代码,如若应用在ASP.NET 2.0上,请自行修改相关变量定义方式。


时间:2008年9月25日 9:54:17 IP:已记录 引用 回复
Rimifon
★☆☆☆☆☆☆☆☆☆
积分:285
发帖:317
登录:2024/3/26
注册:2006/6/28
(2楼)
补充:可将结尾为Detai.aspx?ID=编号的网址
替换成使用Ware[编号].html结尾的网址来访问。


时间:2008年9月25日 9:57:12 IP:已记录 引用 回复
Rimifon
★☆☆☆☆☆☆☆☆☆
积分:285
发帖:317
登录:2024/3/26
注册:2006/6/28
(3楼)
缺点,IIS6.0下面只能rewrite为.aspx等.NET解析的后缀名……


时间:2008年9月25日 12:17:27 IP:已记录 引用 回复
Rimifon
★☆☆☆☆☆☆☆☆☆
积分:285
发帖:317
登录:2024/3/26
注册:2006/6/28
(4楼)
IIS如果将.html设置为aspx解析,需要注意两个地方:
第一,将“确认脚本存在”取消打勾,否则重写地址会提示找不到脚本文件。
地二,需要如下配置web.config文件:
<configuration>
        <system.web>
                <compilation>
                        <buildProviders>
                                <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
                        </buildProviders>
                </compilation>
        </system.web>
</configuration>

相比来说,IIS 7做html后缀地址重写是最简单的,只需要配置configuration\system.webServer\modules\add节点即可。


时间:2008年10月26日 23:06:52 IP:已记录 引用 回复
Rimifon
★☆☆☆☆☆☆☆☆☆
积分:285
发帖:317
登录:2024/3/26
注册:2006/6/28
(5楼)【原创】IHttpModule 方式实现UrlRewrite
需配置web.config,或者直接在IIS站点模块中添加
import System;
import System.Web;

package Rimifon {
    class UrlRewrite implements IHttpModule {

        static var cfg = [
            [ /^\/Portal\//i, "/home/?p=/" ]
        ];

        function Init(ha : HttpApplication) {
            ha.add_BeginRequest(doUrlRewrite);
        }

        function doUrlRewrite(obj, ea : EventArgs) {
            var ctx : HttpContext = obj.Context;
            var qstr = ctx.Request.ServerVariables["QUERY_STRING"];
            var path = ctx.Request.Path;
            if(!!qstr) qstr = "&" + qstr;
            function testUrl(reg, url) {
                if(!reg.test(path)) return false;
                ctx.RewritePath(path.replace(reg, url) + qstr);
                return true;
            }
            for(var i = 0; i < cfg.length; i++) {
                if(testUrl.apply(cfg, cfg[i])) return;
            }
        }

        function Dispose() { }

    }
}


时间:2016年9月30日 3:30:46 IP:已记录 引用 回复

© Copyright 2006-2024,風雲工作室 All rights reserved.
湘ICP备05009306号QQ登录
操作 1 个库,连接 6 次,执行 11 次,耗时 281 毫秒。