Назад | Перейти на главную страницу

Apache: как лучше всего обрабатывать тысячи постоянных перенаправлений?

У нас есть список из 3000 301 редиректа. Нам нужна помощь по

  1. Как лучше всего их разместить? Кажется, размещение этих 3000 строк внутри vhost в httpd.conf было бы беспорядком.
  2. Какие рекомендуемые способы обработки тысяч URL-адресов?
  3. Насколько это повлияет на скорость загрузки страницы и нагрузку на сервер Apache?

Спасибо.

Ты можешь использовать 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

Я бы написал сценарий, который генерирует новый VHOST только со ссылками из списка.