0

または反対に、URL が存在しない場合にのみ URL を書き換えるにはどうすればよいですか? たとえば、404 を傍受します。

コンテキストは次のとおりです。サイトを ASP クラシックから ASP.NET に徐々に移行しています。ゆっくりとは、9000 以上の .asp ページを一度に 1 ページずつ .aspx に変換することを意味します。

これを行っている間、リンク切れを防ぎ、検索エンジンでのランキングが失われないようにしたいと考えています。つまり、.aspx ページによって提供される場合でも、.asp URL はすべて存在し続ける必要があります。

私ができるようにしたいのは、.asp -> .aspx を書き換える ISAPI-Rewrite ルールを用意することです。ただし、ターゲット URL が実際に存在しない場合は、.asp を実行して返すだけです。

そのため、まだ somepage.asp を .aspx に変換していない場合、URL は書き換えられず、somepage.asp が表示されます。somepage.asp がなくなると、URL は somepage.aspx に書き換えられ、実行されて返されますが、Web ブラウザー/検索エンジンは somepage.asp を受け取ったと認識します。

将来のある時点で、.aspx ページに正規の URLを設定し、検索エンジンが都合のよいときに追いつくようにする予定です。

注: IIS でカスタム 404 を使用してファイル システムをチェックし、ターゲットの .aspx ページが存在する場合は Server.Transfer を実行してみましたが、asp クラシックから asp.net に転送することはできません。(「The specified 'Page Language="c#" ' option is unknown or invalid. error '8000d001'」というメッセージが表示されます) これが機能する唯一の方法は、Server.Transfer の代わりに 301/302 リダイレクトを実行した場合です。現時点では望ましくありません。(経営陣は妄想的で、オプションではないと言っています。)

4

2 に答える 2

0

私はそれを考え出した。Chris Haasが提案したように、404ハンドラーを.aspxページにすると、ターゲットページが存在するときにServer.Transferを実行できます。存在しない場合は、フォールスルーして通常の404ステータスを返します。だからこのようなもの:

<%@ Page Language="c#" %>

<%@ Import Namespace="System.IO" %>
<script RunAt="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        String requestedUrl = Request.ServerVariables["HTTP_X_REWRITE_URL"];

        if (requestedUrl.EndsWith(".asp", StringComparison.CurrentCultureIgnoreCase)) {
            String targetUrl = requestedUrl + "x";
            String targetPath = Server.MapPath(targetUrl);

            if (File.Exists(targetPath)) {
                Server.Transfer(targetUrl);
            }
        }
        Response.Status = "404 Not Found";
    }

</script>

私はまだクエリ文字列でそれをテストする必要がありますが、これまでのところ、それはそれぞれのケースを完全に処理します。時が来て管理に問題がなければ、Server.Transferの実行を停止し、301MovedPermanentlyに変更します。IISはディレクトリごとにエラーページを設定できるため、いつ実行するかをある程度選択することもできます。

ちなみに、ISAPI_Rewrite 3にはファイルチェックオプションがあり、これも機能する可能性がありますが、サーバーにはv2しかありません。

于 2011-01-17T15:14:38.980 に答える
0

個人的には、コンテンツが移動している場合は、ページが新しい場所に移動されたことを示すために301リダイレクトを実行するプロセスを作成する必要があります。それは本当にそうです。

これにより、新しいコンテンツのインデックスが作成され、適切にリンクされます。

于 2011-01-14T18:55:58.853 に答える