古いPerch CMSのURLを次のようなカスタムCMSにリダイレクトしようとしています。
Redirect /sites/praxis/ http://example.com/_Unser_Cabinet
Redirect /sites/praxis/sites/chiropraktik http://example.com/_Unser_Cabinet
この場合、praxisのサブフォルダーは同じURLにリダイレクトされますが、最終的には次のようになります。
http://example.com/_Unser_Cabinet/sites/chiropraktik
そして
Redirect /sites/behandlungen/ http://chirohelias.com/_Was_ist_Chiropraktik
Redirect /sites/behandlungen/sauglingekinder/ http://chirohelias.com/_Chiropraktik_fur_Neugeborene_und_Kinder
この場合、サブフォルダーは異なるURLで終了し、同様の結果がここで終了します。
http://example.com/_Was_ist_Chiropraktiksauglingekinder/
最初のリダイレクトを取得して2番目のURLに適用することは理解していますが、これを回避するロジックを理解できません。
Redirect
ディレクティブは、リダイレクト全体の残りのパスを保持するように設計されています。この動作を望まない場合は、代わりにRedirectMatch
を使用して、より多くの制御を行うことができます。
RedirectMatch /sites/praxis.* http://example.com/_Unser_Cabinet
.*
は、そのパスの下にあるすべてのURLに一致し、何も追加されずにそれらを新しいURLにリダイレクトします。パスを使用する場合は、最終ページURLで$1
をプレースホルダーとして使用する必要があります。 ドキュメント を参照してください。
末尾のスラッシュなしでURLをリダイレクトする可能性があるため、praxis/
に末尾のスラッシュを付けませんでした。ただし、リダイレクトしたくない/sites/proxisxyzzy
のようなURLがある場合は、スラッシュを使用する必要があります。
別の回避策は、ディレクティブの順序を逆にすることです。
Redirect /sites/praxis/sites/chiropraktik http://example.com/_Unser_Cabinet
Redirect /sites/praxis/ http://example.com/_Unser_Cabinet
リダイレクトディレクティブは、一致するまで順番に実行されます。最も具体的なものが最初の場合、それが優先されます。このアプローチの欠点は、最初に多くの特定のルールを記述してから、ディレクトリの一般ルールを記述しなければならないことです。