哲学原理用URLRewriter举办URL重写失效

by admin on 2018年12月16日

      运作环境:ASP.NET 2.0 + Windows 2003 SP2
     
求描述:站点中许多食谱都调用了平之页面,通过URL参数区别不同的功力。目前客户要举办搜索引擎优化(SEO),需要以站点中具备带参数的URL改吧简便易记的款式,如”FinancialStatements.aspx?table=IncomeStatements”改也”Statements_Income.aspx”,等等。 
     
动方法:采纳微软供的一个开源类库URLRewriter来举行URL重写,将用户的要重定向到指定的页面。 
http://www.cnblogs.com/micheng11/archive/2008/07/09/1238756.html
     
所受到问题:在开用的服务器上引入URLRewriter并部署URL重写映射表,网站运行成功,所有想之URL均好健康重定向到是的页面,并且没有起“无法找到资源”的错误。将网站发布到生产条件后URL重写效能失效,用户所有请求的URL均不可能重定向到正确的页面,报“不可以找到资源”的荒唐!以下是web.config中关于URLRewriter配置的讯息:
哲学原理 1

当注册DLL或者OCX的不二法门应该利用regsvr32.exe,使用得几近了肯定会认为在cmd运行中形容一抬高串东西特别可恶吧!这里为大家介绍一种植麻烦一不善有益一生的主意。这些主意而右击你想报或反注册的DLL或者OCX就足以了。他的法则是经改注册表使右击OCX或者DLL文件时起挂号和反注册的菜单项。

 哲学原理 2
     
生产服务器就同意看一个共享目录,将网站的具有文件复制到共享目录下即可形成布局,不允许远程登录,由此呢虽然非可能设置生产服务器的IIS了。
      起新我看是映射表错误或配备音讯错误,然而仔细检查并对后该意义仍然没生效,也未尝其他的任何错误新闻,仅仅只是“不可能找到资源”,分外想得到!我甚至特意用web.config中之配备音信写错,然后为从未外反应。我狐疑是IIS中拿站点的Mapping配置中的“检查文件在”被勾选了,后来通过确认欠选取并没有吃入选。Google了生深刻,后来找到同样首随笔就是站点的目结构或会见潜移默化及web.config文件被HttpModules的举办,因为子目录中之部署文件或者连续了父目录中的布局文件,从而造成HttpModules失效。不幸之是自身依然没权力去查看生产服务器上网站所当目标父目录,但发生一些凡是必之,这就是是本网站于生养服务器上是作一个存活网站的子网站运行的,并且大站点上存含有HttpModules的配置文件。
http://www.myspaces.cn/daily/archive/2006/08/24/5050.html
      这么些仅都是怀疑,由于权力的来由,我莫可以亲自去注脚。既然无克一贯利用URLRewriter在生产服务器上落实用户的要求,这固然只能以其余办法了。
      外辟蹊径
      URLRewriter是开源的,下载安装后可间接看看源代码,它以的是HttpModules的方法来拍卖用户要并拓展URL重定向的,现在底问题是HttpModules不可知做事,那么我只能用目光转向Global.asax了。这里来同等首稿子详细讲解了URL重写的规律和兑现情势:
http://blog.joycode.com/scottgu/archive/2007/03/01/94004.joy
      大家可接纳Global中之Application_BeginRequest事件来展开URL重定向,然而仍然需要映射表。URLRewriter中一度包含了打web.config中解析映射表底功用,不妨直接用其。这样,我们只有待将原web.config中的<add type=”URLRewriter.ModuleRewriter, URLRewriter”
name=”ModuleRewriter”
/>一节约注释掉即可,然后于Application_BeginRequest事件中修重定向逻辑。可以一向复制原URLRewriter中ModuleRewriter.cs里之Rewriter方法到Application_BeginRequest。
      有一个题材设留心,原URLRewriter是协助正则表明式判断的,假诺您愿意站点能支撑双向URL改写,则只好改变成为字符串包含匹配了。
      所谓URL双向改写,是在URL改写的根基及举行的功效扩充,例如用户假诺拜访的真实性路径可能是http://localhost/Test.aspx?tab=Performance,经过URL改写后,用户可因而http://localhost/Test_Performance.aspx来拓展访问,可是我们期待当用户用前一个URL访问页面时能自动跳反到后一个地点。这虽是URL的反倒朝匹配。援助URL的反朝匹配不克应用正则表达式了,于是大家需要以web.config文件被关于URLRewriter的映射表稍微改变一下,去丢其中刚则表明式的字符。上边为来己为此底映射表和Application_BeginRequest代码。

上边起头介绍是法:

  <RewriterConfig>
    <Rules>
      <!– Rules for CompanyOverview pages display –>
      <RewriterRule>
        <LookFor>Overview_Performance.aspx</LookFor>
        <SendTo>CompanyOverview.aspx?tab=Performance</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>Overview_Outlook.aspx</LookFor>
        <SendTo>CompanyOverview.aspx?tab=Outlook</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>Overview_Strategy.aspx</LookFor>
        <SendTo>CompanyOverview.aspx?tab=Strategy</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>Overview_KPI.aspx</LookFor>
        <SendTo>CompanyOverview.aspx?tab=KeyPerformanceIndicators</SendTo>
      </RewriterRule>

     注册DLL文件:开发HKEY_CLASSES_ROOT
\Dllfile,新建项shell,再于这下新建Register。你会师发觉Register就是右击弹出之菜系名。再在那一个下新建command,修改该“默认值”为Regsvr32  
%1

      <!– Rules for FinancialStatements pages display –>
      <RewriterRule>
        <LookFor>Statements_Income.aspx</LookFor>
        <SendTo>FinancialStatements.aspx?table=IncomeStatements</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>Statements_Balance.aspx</LookFor>
        <SendTo>FinancialStatements.aspx?table=BalanceSheets</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>Statements_CashFlows.aspx</LookFor>
        <SendTo>FinancialStatements.aspx?table=CashFlows</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>Statements_SegmentRevenues.aspx</LookFor>
        <SendTo>FinancialStatements.aspx?table=SegmentRevenues</SendTo>
      </RewriterRule>

     反注册DLL文件:开发HKEY_CLASSES_ROOT\Dllfile,新建项shell,再于这下新建Unregister,再当其下新建command,修改该“默认值”为Regsvr32  
%1  /u

      <!– Rules for Segment Results pages display –>
      <RewriterRule>
        <LookFor>segments_client_Overview.aspx</LookFor>
        <SendTo>segments_client.aspx?tab=Overview</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_client_Performance.aspx</LookFor>
        <SendTo>segments_client.aspx?tab=Performance</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_client_Outlook.aspx</LookFor>
        <SendTo>segments_client.aspx?tab=Outlook</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_client_Strategy.aspx</LookFor>
        <SendTo>segments_client.aspx?tab=Strategy</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_client_KPI.aspx</LookFor>
        <SendTo>segments_client.aspx?tab=KeyPerformanceIndicators</SendTo>
      </RewriterRule>

      注册和反注册OCX文件打开HKEY_CLASSES_ROOT\OCXfile,然后另外的格局和落得之均等的了。

      <RewriterRule>
        <LookFor>segments_Server_Overview.aspx</LookFor>
        <SendTo>segments_Server.aspx?tab=Overview</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_Server_Performance.aspx</LookFor>
        <SendTo>segments_Server.aspx?tab=Performance</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_Server_Outlook.aspx</LookFor>
        <SendTo>segments_Server.aspx?tab=Outlook</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_Server_Strategy.aspx</LookFor>
        <SendTo>segments_Server.aspx?tab=Strategy</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_Server_KPI.aspx</LookFor>
        <SendTo>segments_Server.aspx?tab=KeyPerformanceIndicators</SendTo>
      </RewriterRule>

     右击一个OCX或者DLL试试看,出现大家牵挂假如之Register和Unregister菜单项了。

      <RewriterRule>
        <LookFor>segments_edd_Overview.aspx</LookFor>
        <SendTo>segments_edd.aspx?tab=Overview</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_edd_Performance.aspx</LookFor>
        <SendTo>segments_edd.aspx?tab=Performance</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_edd_Outlook.aspx</LookFor>
        <SendTo>segments_edd.aspx?tab=Outlook</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_edd_Strategy.aspx</LookFor>
        <SendTo>segments_edd.aspx?tab=Strategy</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_edd_KPI.aspx</LookFor>
        <SendTo>segments_edd.aspx?tab=KeyPerformanceIndicators</SendTo>
      </RewriterRule>

Activex注册和倒注册工作(Regsvr32)

      <RewriterRule>
        <LookFor>segments_mbd_Overview.aspx</LookFor>
        <SendTo>segments_mbd.aspx?tab=Overview</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_mbd_Performance.aspx</LookFor>
        <SendTo>segments_mbd.aspx?tab=Performance</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_mbd_Outlook.aspx</LookFor>
        <SendTo>segments_mbd.aspx?tab=Outlook</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_mbd_Strategy.aspx</LookFor>
        <SendTo>segments_mbd.aspx?tab=Strategy</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_mbd_KPI.aspx</LookFor>
        <SendTo>segments_mbd.aspx?tab=KeyPerformanceIndicators</SendTo>
      </RewriterRule>

动过Activex的丁大半知道,Activex不报是休克于网识别以及接纳的,一般安装程序都晤面自动地将她所用的Activex控件注册了,可是要是你拿到之一个控件需要手动注册怎么惩罚呢?假诺改动注册表这尽管最为辛苦了。在Windows系统下的system文件夹下发生一个名叫regsvr32.exe的次第。他虽然是Windows自带的Activex注册和倒注册工具。它的用法也:

      <RewriterRule>
        <LookFor>segments_osd.aspx</LookFor>
        <SendTo>segments_osb.aspx</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_osd_Overview.aspx</LookFor>
        <SendTo>segments_osb.aspx?tab=Overview</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_osd_Performance.aspx</LookFor>
        <SendTo>segments_osb.aspx?tab=Performance</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_osd_Outlook.aspx</LookFor>
        <SendTo>segments_osb.aspx?tab=Outlook</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_osd_Strategy.aspx</LookFor>
        <SendTo>segments_osb.aspx?tab=Strategy</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>segments_osd_KPI.aspx</LookFor>
        <SendTo>segments_osb.aspx?tab=KeyPerformanceIndicators</SendTo>
      </RewriterRule>
    </Rules>
  </RewriterConfig>

regsvr32详解

      注意,在站点的web.config中添加上述映射表时要以上加<section name=”RewriterConfig”
type=”URLRewriter.Config.RewriterConfigSerializerSectionHandler,
URLRewriter”/>到configSections节点中,否则会报错。

regsvr32  [/s]  [/n]  [/i(:cmdline)]  dllname

void Application_BeginRequest(object sender, EventArgs e)
{
    string requestedUrl = Request.Url.ToString().ToLower();

个中dllname为Activex控件的公文称,提出以安装前拷贝到system文件夹下。

    // get the configuration rules
    URLRewriter.Config.RewriterRuleCollection rules = URLRewriter.Config.RewriterConfiguration.GetConfig().Rules;

参数有如下意义:

    // iterate through each rule哲学原理 3
    for (int i = 0; i < rules.Count; i++)
    {
        // new url send to.
        if (requestedUrl.Contains(Request.ApplicationPath.ToLower() + “/” + rules[i].LookFor.ToLower()))
        {
            Context.RewritePath(Request.ApplicationPath + “/” + rules[i].SendTo);
            break;
        }
        // old url redirect.
        else if (requestedUrl.Contains(Request.ApplicationPath.ToLower() + “/” + rules[i].SendTo.ToLower()))
        {
            Context.Response.Redirect(Request.ApplicationPath + “/” + rules[i].LookFor);
            break;
        }
    }
}

/u——反注册控件

      当然,倘使您间接用URLRewriter能实现URL改写效率虽然再一次好,想辅助双向匹配的语句一贯去修改URLRewriter的源代码即可。在此处我是未曾找到究竟是啊由造成了URLRewriter失效,不得已才使了Global的Application_BeginRequest事件,应当算是一个挽救的章程吧!

/s——不管注册成功也,均不形提醒框

/c——控制高出口

/i——跳了控件的选用项举行安装(与注册不同)

/n——不挂号控件,此起必须和/i选项一起用

一经要登记一个名叫amovice.oxc控件,则打入regsvr32 
amovice.oxc即可;要反注册外不时才需要动用regsvr32   /u  
amovice.ocx就行了。

regsvr32    /s   APIINEX.dll  注册DLL文件

regsvr32    /s    /u   APIINEX.dll卸载DLL文件

regsvr32    /s   Shortcut.ocx 注册OCX文件

regsvr32    /u   Shortcut.ocx卸载OCX文件

/s  .dll或者.ocx注册成功后非亮指示信息。

/u  .dll或者.ocx卸载

可把注册控件的命放入批处理文件被。

regedit  /s   register.reg  直接将报音信注入注册表中。

 

哲学原理 4

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图