web-dev-qa-db-ja.com

Apache2に非常に大きなリダイレクトリストを実装する最適な方法

CMSの変更後にリダイレクトする必要がある約6000のURLがあります。これらのすべてのURLは、IDとともにDBテーブルに格納され、参照されているものを識別できます。このテーブルを使用すると、多数の書き換えルールを使用して1つの巨大な.htaccessを生成できますが、これは非常に効率が悪いと思われます。最適な方法は何ですか?私が知る限り、2つのオプションがあります。

  • キーが古いURLであるRewriteMapを使用します(IDを含まず、テキストのみを含むため、全体が必要です)。 100-150文字の長いキーを持っていることはうまくいくのだろうかと思います。
  • すべての古い/新しいURLのペアと完全に一致するDBテーブルを生成し、リダイレクトを行うための小さなスクリプトを呼び出します。

(次のように要約できます:ハッシュマップはインデックス付きDBテーブルよりもファイルシステムに保存されていますか?)

質問の2番目の部分新しいURLには、呼び出されるページのIDが含まれます。何かのようなもの

www.example.com/abc/21-defghi.html

代わりに私が電話した場合

www.example.com/21-xxx.html

正しいURLへの301リダイレクトを取得します。正確な新しいURLを生成する必要がありますか、それとも2つのリダイレクトを連結しても大丈夫ですか?これは、IDのみを保存するか、新しいURL全体を保存することを意味します。

4
Omar Kohl

巨大な.htaccessを作成すると、少なくともL属性を持つルール(最後のルール)が一致するまで、すべてのリクエストに対して線形に読み取られるため、システムのパフォーマンスに深刻な影響を与える可能性があります。

同様のこと(約3000回のリダイレクト)を行う方法は、.htaccessにカスタムエラーページを配置することです。メモリからの構文は次のようなものです。

ErrorDocument 404 404.php

次に、404.phpで、MySQLデータベースを使用してロジックを実装し、要求されたURLを使用して新しいURLを検索します。見つかった場合は、PHPロケーションヘッダーを使用してリクエストをリダイレクトし、見つからない場合は、カスタムエラーページを表示します。

。htaccessで404リダイレクトを単に発行するのとは異なり、404.phpファイルはリクエストを追跡し、返されるリダイレクトの統計を保持できます。

6
Itai