Apache:何千もの永続的なリダイレクトを処理する最良の方法は何ですか?


20

3000 301リダイレクトのリストがあります。支援が必要です

  1. これらを置くのに最適な場所は何でしょうか?これらの3000行をhttpd.confのvhost内に配置するのは混乱のようです。
  2. 何千ものURLを処理する推奨される方法は何ですか?
  3. それはページの読み込み速度とApacheサーバーの負荷にどれくらい影響しますか?

ありがとう。

回答:


29

Includeディレクティブを使用しhttpd.confて、別のファイルでリダイレクトを維持できます。しかし、多くの正規表現に対してすべてのリクエストをチェックする必要があるため、あまり効率的ではありません。また、ファイルを変更するたびにサーバーの再起動が必要になります。

非常に多くのリダイレクトのより良い方法は、タイプのRewriteMapディレクティブを使用dbmして、URIからリダイレクトへのマップを宣言することです。この方法では、dbmルックアップが非常に高速であり、マップを変更した後、httpdマップファイルの変更時間をチェックするため、サーバーを再起動する必要がないため、効率的です。

書き換えルールは次のようになります(私のFedora 16コンピューターでテスト済み):

RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]

また、dbmマップは次の/etc/httpd/conf/redirects.txtようなテキストマップから作成されます。

/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/

コマンドを使用する

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db

答えてくれてありがとう。私はそれを試しましたが、エラーが発生しました:私の1行のredirects.txtファイルの内容(スペースで区切られた値)mydomain.com/experiment mydomain.com/new_page それは私に 'RewriteCond $ {redirects:$ 1}! 。/usr/local/apache/conf/httpd.confの314行目の構文エラー:RewriteCond:bad flag delimitersコメントアウトしてからapacheが起動したが、mydomain.com / experiment (またはmydomainの他のURL)にアクセスするとエラーが発生した「リクエストを完了できなかった方法でリダイレクトしています」。
ウッカー

Apacheは上記のスニペットで再起動していません。助けてもらえますか?これに関連するエラーは、どのログファイルにも表示されません。
ウッカー

私はそれがテストされていないと言った-私はそれがいくつかの調整が必要になると予想した。十分だと思いました、ごめんなさい。!=との間にスペースを入れることができないため、Httpdは起動しませんでした""。現在、動作するテスト済みのバージョンにサンプルを修正しました。
トメツキー

もう1つのコメント:リダイレクトがクエリ文字列(?URL内のすべて)に依存する必要がある場合は、別のアプローチを使用する必要がありますが、それも可能です。現在は、リダイレクトするクエリ文字列を追加するだけで、たとえばhttp://yourserver.com/foo?q=barにリダイレクトしhttp://serverfault.com/?q=barます。
トメツキー

更新していただきありがとうございます。RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.dbエラーを与えましたRewriteMap dbm type db is invalid。しかし、私が使っRewriteMap redirects txt:/etc/httpd/conf/redirects.txtたときはうまくいきました。プレーンテキストではなく、あなたが説明したように、私はまだハッシュされた方法で行きたいです。しかし、dbmエラーについてはあまり見つけることができませんでした。ご協力いただきありがとうございます。
ウッカー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.