• UrlReWriter.net学习笔记


    搞了一天的Url重写,只是明白怎么使用了,但是运行原理不懂。因为很辛苦的弄了一整天,所以写下来,以备查看。

    UrlReWriter使用的是:Intelligencia.UrlRewriter

    IIS:IIS6.0(XP)

    VS:2008

    以下是笔记:

    利用UrlReWriter进行URL重写的说明:
    1、从http://www.urlrewriting.net/ 下载源码(只找到了源码)。
    2、进行源码编译得到 Intelligencia.UrlRewriter.dll(如果不想编译,可以从这里下载)。
    3、新建网站,注意选择Http方式,利用IIS服务器。
    4、对该网站添加对 Intelligencia.UrlRewriter.dll 的引用。
    5、配置web.config:
    主要是三部,A、添加对dll包的引用 B、配置HttpModules C、配置url重写
    下面是完整的web.config

    <?xml version="1.0"?>
    <configuration>
    <configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
    <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
    </sectionGroup>
    </sectionGroup>
    </sectionGroup>
    <!--A、添加对dll包的引用-->
    <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
    </configSections>
    <!--C、配置url重写-->
    <rewriter>
    <rewrite url="~/tag/(.+)\.html" to="~/Tag.aspx?tag=$1" /> 
    </rewriter>
    
    <appSettings/>
    <connectionStrings/>
    <system.web>
    <compilation debug="false">
    
    <assemblies>
    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    </assemblies>
    </compilation>
    <authentication mode="Windows" />
    <pages>
    <controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </controls>
    </pages>
    
    <httpHandlers>
    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
    </httpHandlers>
    <httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <!--B、配置HttpModules-->
    <add type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" name="UrlRewriter"/>
    </httpModules>
    </system.web>
    
    <system.codedom>
    <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
    type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="WarnAsError" value="false"/>
    </compiler>
    <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4"
    type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="OptionInfer" value="true"/>
    <providerOption name="WarnAsError" value="false"/>
    </compiler>
    </compilers>
    </system.codedom>
    
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
    <remove name="ScriptModule" />
    <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </modules>
    <handlers>
    <remove name="WebServiceHandlerFactory-Integrated"/>
    <remove name="ScriptHandlerFactory" />
    <remove name="ScriptHandlerFactoryAppServices" />
    <remove name="ScriptResource" />
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
    type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
    type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </handlers>
    </system.webServer>
    
    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
    </dependentAssembly>
    <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
    </dependentAssembly>
    </assemblyBinding>
    </runtime>
    </configuration>

    6、配置IIS
    控制面板->管理工具->Internet Information Services
    选择服务器(计算机名)->Web Sites->Default Web Site->你的网站
    右击你的网站->属性->Virtual Directory->Application Settings->Configuration
    点击 Add
        Executable:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
        Extension:.*
        Verbs:选中All Verbs
        Script engine:选中
        Check that file exists:不选

    点击  OK->OK->OK

    7、页面
    Default.aspx:

    <a href="tag/1.html">1</a>
    <a href="tag/a.html">a</a>
    <a href="tag/汉字.html">汉字</a>

    Tag.aspx:
    后台:

    protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    {
    string queryStr = Request.Params["tag"];
    if (string.IsNullOrEmpty(queryStr))
    {
    this.lbl.Text = "您没有选择任何东西";
    }
    else
    {
    this.lbl.Text = "您选择了:" + queryStr;
    }
    }
    }

    前台:
    您输入的是:

    <asp:Label runat="server" ID="lbl"></asp:Label>

    8、测试成功!

    9、解决Form提交显示原始URL的问题:
    这个问题在一位大牛的博客上已经解释的很详细了,这里不再赘述,地址:http://blog.zhaojie.me/2008/01/url-rewrite-3.html
    10、存在问题:

    1)对于url重写的过程不了解;

    2)对于IIS解析请求的过程完全无概念;

    3)只是使用了Intelligencia.UrlRewriter,别的不会使用;

    4)微软的ActionlessForm.dll也可以解决第9个问题,但是没有精力了;

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

    个人感觉:

    今早开始查找UrlReWriter的信息及使用方法,知道现在才弄懂一点,这里要感谢博客园,里面的很多文章帮助了我。

    看到http://blog.zhaojie.me/2008/01/url-rewrite-3.html文章时,只看了一部分,下面看不懂。。。突然发觉asp.net有好多东西,

    好多东西要学习,但是

    知识无限,精力有限,兴趣有限,时间有限

    感觉到人的一生只能在某一方面精通,不可能把所有的东西,甚至自己感兴趣的东西完全学会,突然好伤感。。。

    而且,自己学习速度太慢了,本来今天要做的其他事情只好搁置了,哎!就到这里。

    风筝

    2012.04.11 

     
    标签: UrlReWriter
  • 相关阅读:
    maven编译时错误:无效的目标发行版
    参数传递方法(用Delphi的汇编代码解释)
    Playing with coroutines and Qt
    Qt的一些开发技巧
    刘晏:大唐经济战线的英雄
    Qt的焦点策略
    高级程序员与CTO技术总监首席架构师
    Python入门机器学习
    Service Mesh(服务网格)
    自定义博客园Markdown样式.超简单!
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2443102.html
Copyright © 2020-2023  润新知