如何没有“default.aspx”网址?

时间:2009-02-21 15:12:35

标签: redirect url-rewriting asp.net-2.0 global-asax

我在我的Web应用程序的Global.asax文件中实现了以下代码。

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/

最后两个条件非常有效。但是第一个条件没有用,因为它在URL中添加了“default.aspx”,我并不感兴趣。

任何人都可以告诉我如何制作如下

example.com 应重定向到 http://www.example.com

由于

3 个答案:

答案 0 :(得分:2)

实际上,在请求到达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);
        }
    }
}

答案 1 :(得分:2)

很可能Request.Url附加了default.aspx,因为那是当时实际提供的页面(IIS使它对您透明,因为它是默认页面之一)。

当您创建要重定向的新网址时,请在其末尾添加另一个.Replace(“/ default.aspx”,“”)。所以......

string url = context.Request.Url.ToString().Replace("://", "://www.").Replace("/default.aspx", "");

答案 2 :(得分:0)

使用以下代码更改您的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>