
Я пытаюсь оптимизировать свой файл .htaccess, чтобы избежать проблем с производительностью.
В моем файле .htaccess есть что-то вроде этого:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} bigbadbot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} otherbot1 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} otherbot2 [NC]
RewriteRule ^.* - [F,L]
Первое правило перезаписи (bigbadbot) обрабатывает около 100 запросов в секунду, тогда как два других правила перезаписи, расположенных ниже, обрабатывают всего несколько запросов в час.
Мой вопрос заключается в следующем: поскольку первое правило перезаписи (bigbadbot) обрабатывает около 99% трафика, будет ли лучше поместить эти правила в два отдельных набора правил?
Например:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} bigbadbot [NC]
RewriteRule ^.* - [F,L]
RewriteCond %{HTTP_USER_AGENT} otherbot1 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} otherbot2 [NC]
RewriteRule ^.* - [F,L]
Что будет лучше с точки зрения производительности? Кто-нибудь когда-нибудь это тестировал?
решение1
По сути, это не должно иметь никакой разницы в производительности, поскольку как только один Cond совпадает с блоком OR, остальные не обрабатываются (в этом нет смысла). Технически, в первую очередь, выполняется некоторая обработка из-за блока OR, поэтому я полагаю, что разбиение на части будет немного более эффективным.
Я бы сосредоточил свои усилия в другом месте, если у вас проблемы с производительностью. Возможно, профилирование любого приложения, которое вы обслуживаете. Кроме того, если это размещено, у хостера может быть слишком много веб-сайтов на одном сервере.