如何获得没有“default.aspx”的网址?
问题描述:
我在我的web应用程序的Global.asax文件中实现了以下代码。如何获得没有“default.aspx”的网址?
void Application_BeginRequest()
{
string rule = ConfigurationManager.AppSettings.Get("WwwRule");
HttpContext context = HttpContext.Current;
if (context.Request.HttpMethod != "GET" || context.Request.IsLocal)
{
return;
}
if (context.Request.PhysicalPath.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase))
{
string url = context.Request.Url.ToString();
if (!url.Contains("://www.") && rule == "add")
{
string url = context.Request.Url.ToString().Replace("://", "://www.");
context.Response.Redirect(url);
}
}
}
当我上面的代码运行其工作原理如下
example.com重定向到www.example.com/default.aspx
www.example.com重定向到www.example.com
http://www.example.com/重定向到http://www.example.com/
最后两个条件的作品非常好。但第一个条件did'nt效果很好,因为它在我没有在intrested的URL加入“的Default.aspx”。
谁能告诉我如何使它如下
example.com应该重定向到http://www.example.com
感谢
答
最有可能的是Request.Url追加Default.aspx的,因为这是页面的时候居然被服务(IIS使这个透明的,因为你它是默认页面之一)。
当您创建要重定向的新URL时,在其末尾添加另一个.Replace(“/ default.aspx”,“”)。所以...
string url = context.Request.Url.ToString().Replace("://", "://www.").Replace("/default.aspx", "");
答
其实,请求到达BeginRequest事件之前/default.aspx加入。如果你想删除它,你必须真正将其删除:
void Application_BeginRequest() {
string rule = ConfigurationManager.AppSettings.Get("WwwRule");
HttpContext context = HttpContext.Current;
if (context.Request.HttpMethod != "GET" || context.Request.IsLocal) {
return;
}
if (context.Request.PhysicalPath.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase)) {
string url = context.Request.Url.ToString();
if (!url.Contains("://www.") && rule == "add") {
url = url.Replace("://", "://www.");
if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase) {
url = url.Substring(0, url.Length - 13);
}
context.Response.Redirect(url);
}
}
}
答
用下面的代码改变你的webconfig:它解决了我的同样的问题。
<?xml version="1.0"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="default.aspx Redirect" stopProcessing="true">
<match url="^(.*\/)*default\.aspx$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" />
</conditions>
<action type="Redirect" url="{R:1}" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
在我看来,你(试图)做网址重写,而不是实际的重定向。 – Cerebrus 2009-02-21 15:18:47
不,我不认为它的URL重写?我只是希望它不应该添加default.aspx,如果有人要求像example.com/search.aspx那么它可以重定向到http://www.example.com/search.aspx – Prashant 2009-02-21 15:22:53