web-dev-qa-db-ja.com

サブディレクトリのhtaccess固有の宛先を介してURLをリダイレクトする

古い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に適用することは理解していますが、これを回避するロジックを理解できません。

2

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

リダイレクトディレクティブは、一致するまで順番に実行されます。最も具体的なものが最初の場合、それが優先されます。このアプローチの欠点は、最初に多くの特定のルールを記述してから、ディレクトリの一般ルールを記述しなければならないことです。

2