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/にリダイレクトします

最後の 2 つの条件は非常にうまく機能します。しかし、最初の条件は、私が興味を持っていない URL に「default.aspx」を追加しているため、うまく機能しませんでした。

どなたか下記の作り方を教えてください

example.comはhttp://www.example.comにリダイレクトする必要があります

ありがとう

4

3 に答える 3

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

ほとんどの場合、Request.Url は default.aspx を追加しています。これは、その時点で実際に提供されているページであるためです (IIS は、既定のページの 1 つであるため、これを透過的にします)。

リダイレクトする新しい URL を作成するときは、末尾に別の .Replace("/default.aspx", "") を追加します。そう...

string url = context.Request.Url.ToString().Replace("://", "://www.").Replace("/default.aspx", "");
于 2009-02-21T15:35:27.850 に答える