インターネットで見ると、多くの友人が asp.net で urlrewrite を実行し、HttpHandle+Server.Transfer メソッドを使用していることがわかりました。実はこの方法は間違っています。まず、HttpHandle は urlrewrite を実装できません。次に、Server.Transfer は標準のリダイレクトであり、urlrewrite ではありません。
実際、urlrewrite を実装するために独自の HttpHandle または HttpModule を実装する必要はありません。数行のコードで簡単に実装できます。
ここで紹介するのは仮想ホスト上です。仮想ホストは自分のサーバーとは異なります。iis を変更する権限も、iis 書き換えなどの iis プラグインをインストールする権限もありません。ただし、必要な機能は簡単に完了できます。
具体的な方法は次のとおりです。 global.asax.cs を開き、protected void Application_BeginRequest(Object sender, EventArgs e) を見つけます。メソッド名から、それが何をするのか推測できると思います。次のコードを入力します:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
文字列 oldUrl = HttpContext.Current.Request.RawUrl;
文字列パターン = @"^(.+)default/(d+).aspx(?.*)*$";
string replace = "$1default.aspx?id=$2";
if(Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
string newUrl = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
}
上記のコードでは、.../default/123.aspx のような URL にアクセスします。もちろん、この URL は私のコンピューターには存在しないため、.../default.aspx id? に転送されます。 =123。
もちろん、強力な正規表現を使用すると、必要に応じて URL を書き換えることができます。これはすべてサーバー側でサイレントに行われるため、クライアントはそれを認識しません。仮想ホスト上にあるため、.aspx ファイルをリダイレクトすることしかできません。独自のサーバーの場合は、iis にサフィックスを登録するだけで、あらゆるサフィックスを処理できます。たとえば、*.myweb のようなタイプを登録すると、他のユーザーがdefault/456.mywebにアクセスしたときに、default.aspx?id=456にリダイレクトできます。つまり、思いつく限り、.net はそれを実現するのに役立ち、これには多くのコードは必要ありません。