在网络中重写网址.配置 c#

本文关键字:配置 重写 网络 | 更新日期: 2023-09-27 18:34:19

我想重写一个网址以匹配页面文件名的确切名称。我的意思是:我有一个 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
            }
        }

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

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

有什么建议吗?提前谢谢你

在网络中重写网址.配置 c#

首先,一个规则不能有多个匹配元素。这可能就是您收到 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>