0

我在我的 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

谢谢

4

3 回答 3

2

实际上,/default.aspx 是在请求​​到达 BeginRequest 事件之前添加的。如果要删除它,则必须实际删除它:

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);
        }
    }
}
于 2009-02-21T15:34:40.567 回答
2

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

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

string url = context.Request.Url.ToString().Replace("://", "://www.").Replace("/default.aspx", "");
于 2009-02-21T15:35:27.850 回答
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>
于 2014-02-06T09:35:19.087 回答