4

複数のビジネスユニットを持つウェブサイトに構造を再設計しました。ここで、(301) を新しいページにリダイレクトしたいと考えています。

IE:
www.example.com/abc
今は www.example.com/default.aspx?article=abc

これを行うために Global.asax を使用しようとしましたが、デバッグすると正しく動作します。

        if (Request.RawUrl.Contains("abc"))
        {
            Response.RedirectLocation = "/default.aspx?article=abc";
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved";
            Response.End();
        }

したがって、http://localhost:1234/example/abcは適切にリダイレクトされますが、(1234 はデバッグ サーバーのポートです)
http://localhost/example/abcはリダイレクトされず、404 が返されます。

何か案は?


追加情報: http://localhost/example/abc/default.aspxにアクセスすると、適切にリダイレクトされます。

4

8 に答える 8

6

組み込みの Web サーバー (VS に付属するもの) を使用していることをポートが示している場合、これはおそらく動作します。これは、要求が常にASP.NET フレームワークを介してルーティングされるためです。

/abc で終わる要求は、ASP.NET フレームワークを介して自動的にルーティングされません。IIS は要求を認識していない可能性があるためです。このような要求が aspnet_isapi.dll にルーティングされていることを確認するには、IIS の設定を確認する必要があります。


編集:これを実現するには、ワイルドカード マッピングを追加する必要があります。

  1. IIS マネージャーで、ローカル コンピューターを展開し、[Web サイト] フォルダーを展開します。目的の Web サイトまたは仮想ディレクトリを右クリックし、[プロパティ] をクリックします。
  2. ホーム ディレクトリ、仮想ディレクトリ、またはディレクトリの適切なタブをクリックします。
  3. [アプリケーション設定] 領域で、[構成] をクリックし、[マッピング] タブをクリックします。
  4. ワイルドカード アプリケーション マップをインストールするには、次の手順を実行します。
    • [マッピング] タブで、[追加] または [挿入] をクリックします。
    • [実行可能ファイル] テキスト ボックスに DLL へのパスを入力するか、[参照] をクリックして移動します (たとえば、ASP.NET 2.0 dll は、私のコンピューターの c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll にあります)。機械)
    • 拡張子には、もちろん引用符なしで「.*」を使用します
    • 探したい動詞を選択します (GET、HEAD、POST、DEBUG は ASP.NET では通常、あなたが決めます)
    • 「スクリプト エンジン」または「アプリケーション エンジン」が選択されていることを確認します。
    • 「ファイルの存在を確認する」のチェックを外す
    • [OK] をクリックします。

私はこれについて間違っているかもしれませんが、もしそうなら、誰かが私を訂正してくれることを願っています. :)

于 2008-09-23T15:46:15.560 に答える
2

IIS ワイルド カード リダイレクトを使用する必要があります。次のようなものが必要です。

 *; www.example.com/*; www.example.com/default.aspx?article=$0

Microsoftには合理的な参照があります

Apache を使用している場合は、htaccess ファイルを変更する必要があると思います。

于 2008-09-23T15:51:18.030 に答える
1

現在、Visual Studio Web サーバーでサイトをテストしていますか? これは通常、「localhost:nnnnn」でサイトを実行します。ここで、「nnnnn」はポート番号 (上記のように 1234 です) であり、ポートなしで実行するようには設定されません。

関連するマシンにIISがインストールされている場合は、プロジェクトを発行してください。コードに動作しない原因となるものは何もないように見えるため、「nnnnn」なしで動作することを確認できるはずです。そうする。

于 2008-09-23T15:43:47.470 に答える
0

web.config ファイルが各 Web サイトで同じであることを確認しましたか (:1234 が :80 と異なると仮定します)。

また、localhost:80 を試しましたか?

于 2008-09-23T15:42:42.713 に答える
0

おそらく、 Routingを見てみたいと思うでしょう。

見る:

于 2008-09-23T15:46:14.577 に答える
0

デフォルトでは、IIS は処理のためにすべての要求を ASP.NET に渡すわけではありません。"aspx" などの一部のリソース拡張のみが、処理のために asp.net に渡されます。http://localhost/example/abcを要求すると、IIS はディレクトリを見つけて、そのディレクトリからロードする既定のファイル (つまり、default.aspx、index.html) があるかどうかを確認しようとします。ジャンク "abc" タグが含まれるディレクトリが見つからないため、ロードする default.aspx ファイルが見つかりません。

http://localhost/example/abc/default.aspxを読み込もうとすると、IIS は "aspx" 拡張子を認識し、すぐに ASP.NET ランタイムに引き渡して処理します。http://localhost/example/abc要求が読み込まれない理由は、ASP.NET に渡されないためです。もちろん、global.asax はそれを認識しません。

Cassini がホストするサイトがすべての要求を処理するため、その呼び出しは ASP.NET と global.asax ファイルによって処理されます。

不明な拡張機能を ASP.NET に転送するには、IIS でハンドラー マッピングをセットアップする必要があると提案した Darren Kopp 氏に同意します。

于 2008-09-23T19:16:58.830 に答える
0

あなたのhttp://localhost/example/abcは、期待どおりに Global.asax を呼び出していません。通常、 http://localhostはポート 80 (:80) で実行されます。ポート 80 でサイトを実行する場合は、IIS にサイトを展開してここで実行する必要があります。

于 2008-09-23T15:46:42.253 に答える
0

未知の拡張機能をすべて asp.net に転送するには、IIS でハンドラー マッピングを設定する必要があります。最初のものはcassiniがすべてのリクエストを処理しているため機能し、2番目のものはIISがそのディレクトリを探しているため機能しませんが、.netフレームワークがコードを実行する代わりに存在しません。

asp.net で URL 書き換えを行う方法に関する情報を次に示します。

可能であれば、新しいApplication Request RoutingまたはUrlRewrite.netを使用することをお勧めします

于 2008-09-23T15:49:20.280 に答える