web-dev-qa-db-ja.com

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

3000 301リダイレクトのリストがあります。私たちは助けが必要です

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

ありがとう。

21
ucker

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

多くのリダイレクトのより良い方法は、タイプdbmの-​​ RewriteMap ディレクティブを使用して、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
29
Tometzky

リストからのリンクだけで新しいVHOSTを生成するスクリプトを作成します。

2
Lucas Kauffman