web-dev-qa-db-ja.com

ルールを新しいサイトにリダイレクトするには、古いサイトをアクティブにする必要があります

IIS 7.5 Windows Server 2008で提供されている2つのWebサイトがあり、1つのサイト(projects.com)が最近移動して2番目のサイト(mainsite.org)の下に置かれています。このサブサイトには、ドキュメント、PDF、MP3、PPtsなどの多数のリソースがあり、多くのサイトにはリンクがあり、人々はブックマークを持っています。

リソースリンクがサブサイトの古いURLを指している場合、ユーザーが新しいサイトの現在の場所にリダイレクトされるように(404を受信せずに)書き換え/リダイレクトルールを作成するように求められました。

構造は次のようになります。

projects.comの古いURL
projects.com/~abc/assets/pdfs
projects.com/~abc/assets/docs

mainsite.orgの新しいURL
mainsite.org/abc/assets/pdfs
mainsite.org/abc/assets/docs

projects.comの下に記述されたインバウンドルールは次のようになり、すべての実用的な目的で機能します。

[rule name="ABC resources redirect" stopProcessing="true"]
    [match url="^~abc/assets/(\w+)/(\w+)\.(\w+)" /]
    [action type="Redirect" url="http://mainsite.org/abc/assets/{R:1}/{R:2}.{R:3}" appendQueryString="false" /]
[/rule]

*ここで{R:1}/{R:2}。{R:3} = {サブフォルダー}/{ファイル名}。{ext}

私の問題は、リソースへのリンクが古いURLを指している場合、要求されたリソースが古いprojects.comサイトの下に存在し続け、新しいサイトにも同じコピーが存在する必要があることです。そうでない場合は、リダイレクトが発生するのではなく、404エラーが表示されます。

これは、2つの場所に同じリソースを保持する必要があることを意味し、この種の冗長性は良くありません。

追加の問題:projects.com/~abc/assets/pdfs/anchors.pdfのPDFファイルに直接移動すると、適切にリダイレクトされます宛先:mainsite.org/abc/assets/pdfs/anchors.pdfおよびPDFファイルがブラウザーで開きます

ただし、他のMIMEタイプに移動すると、projects.com/~abc/assets/docs/questions.doc OR projects.com/~abc/assets/ppt/grand_opening.pptが自動的にダウンロードされます(または、使用するブラウザーに応じて、「保存」のプロンプトが表示されます) 。

ただし、ダウンロードが行われた後、アドレスバーのURLはリダイレクトを反映せず、ドキュメントはmainsite.orgサイトからダウンロードされますが、古いURL(少しわかりにくい)のままです。

おそらく私のアプローチは概念的に欠陥があるように感じます。この冗長性の問題を解決するための提案はありますか?

1
krausdogs

IIS書き換えルールは、おそらく必要以上に複雑になっているようです。これを試してください:

<rule name="ABC resources redirect" enabled="true" stopProcessing="true">
    <match url="^~abc/assets/(.*)" ignoreCase="true" /> 
    <action type="Redirect" url="http://mainsite.org/abc/assets/{R:1}" />
</rule>

~abc/assets/(followed by a file with any file extension and case)を含むURLを新しいサイトのURLに301リダイレクトする必要があります。

ここで説明されているIIS "Test pattern"ツールを使用して、これをテストおよび変更できます。 Microsoft IIS.net-Rewrite Rule Patternsのテスト

また、各テストの間にブラウザのキャッシュを完全にクリアしてください。

それでもMIMEタイプに問題がある場合は、それに固有の別の質問を投稿することをお勧めします。

0
dan