2012-05-14 5 views
0

多くの異なる非マイクロソフトテクノロジを使用して書かれた古いWebサイトを書き直しています。新しいサイトはasp.net Webフォームです。URLが有効でない場合、404エラーを投げる前に従来のURLルックアップを実行してください

データベースにOLD urlのリストがあり、データベース内のそのURLのリストに対して要求されたページURLを検査し、NEW URLの内容に適切な301リダイレクトを実行するルーチンがあります。

効率的な観点からは、要求されたURLが本質的に404 /見つからない場合のみ、このOLD URLルックアップを実行する方法はありますか。私は大部分の時間として、(Global.asaxのApplication_BeginRequestを介して)すべての単一ページリクエストで自分の「Check-Old-Urls-And-Found-If-Found」ルーチンを起動したくありません。有効な新しい.netページで、301リダイレクトは必要ありません。したがって、本質的に404エラーを投げようとしている場合にのみ私のルーチンを起動することができるようにしたいと思います。

Dbの古いサイトのURLを確認するルーチンがキャッシュされているので、少なくとも毎回データベースに当てはまるわけではありませんが、このルーチンを呼び出すことは避けたいと思います。キャッシュが期限切れになっています)。

私はおそらく、global.asax内のApplication_Errorルーチンの内部から古いurl検索を実行し、404ステータスのエラーコードをチェックし、そのシナリオで古いURL検索を行うことができると考えていましたが、テストすると、 global.asaxのApplication_Errorルーチンでブレークポイントに当たっているように見えます。代わりにブラウザにIIS 7 404 Not Foundエラーが表示されています。

ブラウザは新しいURLに301の応答を受け取り、(要求されたURLが新旧の風味のURLでない限り)不正な404応答コードを取得しないようにする必要があります。

誰もこの状況を効率的に処理する方法をお勧めしますか?

+0

カスタム404ページを作成し、必要に応じてそこからリダイレクトします。 –

+0

IISがこれに対処できない理由はありますか?それからあなたのサイトにヒットする前に、古いリンクに301リダイレクトが発行されます。 –

+0

古いURLには一貫したパターンはありません。それらは絶対に混乱していますので、IISにどのような種類のURL /パターンを調べるかはわかりません。 – marcusstarnes

答えて

0

IMOの最もよいことは、IIS Rewrite Moduleをインストールして、すべての古いURLにリダイレクトを作成することです。あなたは別のXMLファイルで301のリダイレクトを持つことができ、それはSOこれについて投稿され、ここで、よりクリーンなアプローチです:

IIS7 urlrewrite module - Rules in external xml file

更新:あなたは、単にこのように、何かをURLのリストを置くことができます。

<rule name="Redirect map bluesunhotels"> 
     <match url=".*"/> 
     <conditions> 
     <add input="{bluesunhotels:{REQUEST_URI}}" pattern="(.+)"/> 
     </conditions> 
     <action type="Redirect" url="{C:1}" appendQueryString="false"/> 
    </rule> 
    </rules> 
    <rewriteMaps> 
    <rewriteMap name="bluesunhotels"> 
     <add key="/index.php?show=2326" value="/resort-afrodita.aspx"/> 
     <add key="/index.php?show=2271" value="/starigrad-paklenica.aspx"/> 
    </rewriteMap> 
    </rewriteMaps> 
+0

私の状況でこれが見ることができる唯一の問題は、新しいURL /ルートを生成するために私のasp.netプロジェクトに依存しているため、リダイレクト先の値をハードコーディングしたくないということです。私の開発環境と本番環境での新しいURLの違い(異なるIDなどが使用されています)。 – marcusstarnes

+0

301は永久的なリダイレクトであり、ブラウザはそれを永続的にキャッシュすることに注意してください。リダイレクトページを1つリダイレクトしてからリダイレクトすることもできます。 www.youtube.com/watch?v=r1lVPrYoBkA –

+0

@AntonioBakulaはこのリンクで私に答えることができますが、私はあなたと同じことを試みましたが、問題は来ているhttps://stackoverflow.com/questions/46651658/how-can-i -call-global-asax-on-asp-page-open –

関連する問題