В моем файле .htaccess я пытаюсь заблокировать некоторых ботов, используя:
RewriteCond% {HTTP_USER_AGENT} ^ badbot [NC]
Но я хочу изменить эти условия на что-то более инклюзивное, например:
Метод №1: RewriteCond% {HTTP_USER_AGENT}. * Badbot [NC, OR]
ИЛИ
Метод № 2: RewriteCond% {HTTP_USER_AGENT} ^. * Badbot [NC, OR]
ИЛИ
Метод № 3: плохой бот RewriteCond% {HTTP_USER_AGENT} [NC, OR]
Вопрос в том, какой из этих 3 методов лучше всего подойдет для производительности сервера?
Спасибо!
Если вы ищете оптимальную производительность ... Во-первых, пусть Apache игнорирует / пропускает поиск файлов .ht .. Отключите .htaccess ..: D
AllowOverride None
И помещайте свои вещи / перезаписи / и т.д. прямо в каждый vhost ..
Затем выберите 1,2 или 3: D
Тогда вы уже сделали шаг в сторону «быстрее»
Надеюсь, это поможет ..: D
Насколько мне известно, разница в производительности между ними небольшая. По логике, /.*badbot/ и / badbot / должны быть эквивалентными, и, поскольку регулярные выражения анализируются слева направо, я бы также подумал, что ^ не имеет значения.
Я тестировал их с помощью Perl (который может использовать несколько другой движок регулярных выражений, чем mod_rewrite), и он действительно показал, что / badbot / работает немного быстрее, чем другие, но это могло быть связано с используемыми мной строками. Кроме того, учитывая, что максимальная длина USER_AGENT составляет 200, это, вероятно, ненужная оптимизация. Вы получите больше оптимизации, поместив их в httpd.conf вместо .htaccess.
Я получил следующие результаты тестирования:
[james@aladdin ~]$ time perl -e 'my $x = "bad" x 99999999; $x .= "badbot"; print "true" if $x =~ /^.*badbot/;'
true
real 0m2.575s
user 0m1.847s
sys 0m0.712s
[james@aladdin ~]$ time perl -e 'my $x = "bad" x 99999999; $x .= "badbot"; print "true" if $x =~ /badbot/;'
true
real 0m2.110s
user 0m1.378s
sys 0m0.691s
[james@aladdin ~]$ time perl -e 'my $x = "bad" x 99999999; $x .= "badbot"; print "true" if $x =~ /.*badbot/;'
true
real 0m2.522s
user 0m1.866s
sys 0m0.647s