Вы можете использовать Include
директиву in, httpd.conf
чтобы иметь возможность поддерживать перенаправления в другом файле. Но это было бы не очень эффективно, поскольку каждый запрос должен был бы проверяться по множеству регулярных выражений. Кроме того, перезагрузка сервера потребуется после каждого изменения в файле.
Лучшим способом для такого количества перенаправлений было бы использование директивы типа RewriteMapdbm
для объявления карты от 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
!=
и""
- я исправил мой пример до работающей и протестированной версии.?
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. Спасибо за вашу помощь.Я написал бы скрипт, который генерирует новый VHOST только с ссылками из списка.
источник