• ASP.NET 使用URLRewriter重写二级域名


    这里要求对域名进行重写,实现http://1234.abc.com/ 到 ~/Defa.aspx?id=1234的重写。

    第一:域名
     

    首先域名要支持泛解悉,就是域名解悉的主机名为星号*,例:*.abc.com。如下图

     


    这样能保证你在浏览器地址栏输入任何前缀,DNS都会把它们指向到你指定的IP地址上。

      

    第二:IIS设置(Win2003 + IIS 6为例)
     

    (1)网站必须为Web服务器的默认站点,即端口号为80,主机头为空的站点。如下图所示。

     


    该站点接收所有对该服务器的HTTP请求(其它设置为主机头的站点除外)。所以任何二级域名访问该服务器都会由该站点进行处理。

    (2)另外要在站点的“通配符应用程序映射”列表中添加ASP.NET的Web请求处理程序aspnet_isapi.dll。如下图所示。

     


    在这里的设置,是让该站点接到的所有请求都交给aspnet_isapi.dll处理。

      

    第三:修改Microsoft的URLRewriter。
     

    运行开源项目URLRewriter。这里需要修改两个地方:

    (1)BaseModuleRewriter.cs类

    protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)
    {
         HttpApplication app = (HttpApplication) sender;
         //Rewrite(app.Request.Path, app);
        Rewrite(app.Request.Url.AbsoluteUri, app);    // ## ## ## 这里修改了
    
    }
    

    这里将app.Request.Path 替换成了 app.Request.Url.AbsoluteUri

    (2)ModuleRewriter.cs类

    protected override void Rewrite(string requestedPath, System.Web.HttpApplication app)
    {
        // log information to the Trace object.
        app.Context.Trace.Write("ModuleRewriter", "Entering ModuleRewriter"); 
    
        // get the configuration rules
        RewriterRuleCollection rules = RewriterConfiguration.GetConfig().Rules; 
    
        // iterate through each rule...
        for (int i = 0; i < rules.Count; i++)
        {
            // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory)
            //string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";
            string lookFor = "^" + rules[i].LookFor + "$";    // ## ## ## 这里修改了
    
            // Create a regex (note that IgnoreCase is set...)
            Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);
    
            // See if a match is found
            if (re.IsMatch(requestedPath))
            {
                // match found - do any replacement needed
                string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));
    
                // log rewriting information to the Trace object
                app.Context.Trace.Write("ModuleRewriter", "Rewriting URL to " + sendToUrl);
     
                // Rewrite the URL
                RewriterUtils.RewriteUrl(app.Context, sendToUrl);
                break;     // exit the for loop
            }
        } 
    
        // Log information to the Trace object
        app.Context.Trace.Write("ModuleRewriter", "Exiting ModuleRewriter");
    }
    

    这里将string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";

      改成了 string lookFor = "^" + rules[i].LookFor + "$";

    这两个地方修改完以后,生成项目。将项目bin/Debug目录下的URLRewriter.dll文件Copy到我们要重写URL的项目中。

    第四:配置项目
    (1)在web.config文件的configSections节点下添加如下一行代码

    1 <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>

    这里配置一个重写配置的类

    (2)修改httpModules节点,在里面添加一行配置代码

    1 <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter"/>

    (3)在主节点configuration节点下添加路由规则,代码如下:

    1 <!-- URL重写 将捕获页面转发到实际地址 -->
    2
    3 <RewriterConfig>
    4
    5 <Rules>
    6
    7 <RewriterRule>
    8
    9 <LookFor>http://(\w+).abc.com/</LookFor>
    10
    11 <SendTo>~/Defa.aspx?id=$1</SendTo>
    12
    13 </RewriterRule>
    14
    15 </Rules>
    16
    17 </RewriterConfig>
    18
    19 <!-- URL重写 将捕获页面转发到实际地址 ( 结束 ) -->

    代码里一个RewriterRule节点就是一个规则,这时只有一个,即把域名中的主机头部分做为Defa.aspx页面的id参数的值发送给Defa.aspx页面。

    注意:这里LookFor节点里的http://(\w+).abc.com/不能少了最后的反斜框

    OK,一切完工

    发布,上传到服务器,测试一下,如图

    本次测试需要一个类库:URLRewriter.dll (测试版本 1.0.1495.18710)

    官网下载地址:http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi

  • 相关阅读:
    OpenCV-C++ 图像上采样和降采样
    OpenCV-C++ 图像形态学操作应用-提取水平与垂直线
    OpenCV-C++ 图像形态学操作
    OpenCV-C++ 图像滤波(二)-中值滤波-双边滤波
    OpenCV-C++ 图像滤波(一)-均值滤波-高斯滤波
    OpenCV-C++ 绘制基本形状与编写文字
    OpenCV-C++ 调整图像亮度和对比度
    OpenCV-C++ 图像混合
    Mysql新建表,插入中文时报错“Incorrect string value: 'xE4xBDxA0xE5xA5xBD' for column”问题
    springcloud11 spring cloud config
  • 原文地址:https://www.cnblogs.com/zhhh/p/1987985.html
Copyright © 2020-2023  润新知