在web.Config c#中重写URL

时间:2016-02-12 15:42:05

标签: c# asp.net url-rewriting web-config global-asax

我想重写一个url以匹配页面文件名的确切名称。 我的意思是:我有一个http://example.com/PagePage.aspx,并且在浏览器栏上输入http://example.com/pagepage.aspx我想再次获得http://example.com/PagePage.aspx

当然,在键入任何字符组合时也一样,即Pagepage.aspx,pagePage.aspx等......

我试过这样的方式:

<system.webServer>
    <rewrite>
      <rules>
        <rule name="SpecificRewrite" stopProcessing="true">
          <match url="^pagepage$" />
          <match url="^Pagepage$" />
          <match url="^pagePage$" />
          <action type="Rewrite" url="PagePage.aspx" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>

但我得到“500 - 内部服务器错误”。

所以我也试过这种方式:

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="SpecificRewrite" stopProcessing="true">
          <match url="^pagepage\/?$" />
          <match url="^Pagepage\/?$" />
          <match url="^pagePage\/?$" />
          <action type="Redirect" url="/PagePage.aspx" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>

但我得到一个无限循环

我试图使用Global.asax

获得相同的效果
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            string path = context.Request.Path;
            if (path.Equals("/pagepage.aspx"))
            {
                context.RewritePath(path.Replace("pagepage.aspx", "PagePage.aspx"));
// or context.RewritePath("PagePage.aspx"); is the same
            }
        }

但是,再次......我得到一个无限循环的错误......

我用谷歌搜索了这个问题,但是...我发现的方法或多或少与我已经尝试过的方法相同。我哪里错了?

有关它的任何建议吗? 提前谢谢

1 个答案:

答案 0 :(得分:0)

首先,您不能为规则配置多个匹配元素。这可能是你得到500错误的原因。其次,我认为你实际上意味着重定向行动而不是重写。所以下面,将检查结束pagepage.aspx的请求,无论字母大小写,条件将检查url是否以PagePage.aspx结尾,因此它不会进入无限循环。这是:

<rule name="SpecificRewrite" stopProcessing="true">
 <match url="^pagepage.aspx$" />
 <conditions>
  <add input="{REQUEST_URI}" pattern="PagePage.aspx" ignoreCase="false" negate="true" />
 </conditions>
 <action type="Redirect" url="PagePage.aspx" />
</rule>