我想重写一个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
}
}
但是,再次......我得到一个无限循环的错误......
我用谷歌搜索了这个问题,但是...我发现的方法或多或少与我已经尝试过的方法相同。我哪里错了?
有关它的任何建议吗? 提前谢谢
答案 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>