如何获得没有“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

感谢

+0

在我看来,你(试图)做网址重写,而不是实际的重定向。 – Cerebrus 2009-02-21 15:18:47

+0

不,我不认为它的URL重写?我只是希望它不应该添加default.aspx,如果有人要求像example.com/search.aspx那么它可以重定向到http://www.example.com/search.aspx – Prashant 2009-02-21 15:22:53

最有可能的是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>