在我的 .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} badbot [NC,OR]
问题是,这三种方法中的哪一种最适合服务器性能?
谢谢!
答案1
据我所知,它们之间的性能差异很小。从逻辑上讲,和/.*badbot/
应该/badbot/
是等效的,而且由于正则表达式是从左到右解析的,所以我也认为^
没有区别。
我用 Perl 测试了这些代码(Perl 使用的正则表达式引擎可能与 mod_rewrite 略有不同),结果显示它比其他代码快很多,但这可能与我使用的字符串有关。另外,请记住 USER_AGENT 的最大长度为 200,这可能是不必要的优化。将它们放在而不是/badbot/
中可以获得更多优化。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
答案2
如果您寻求最佳性能...首先让 Apache 忽略/跳过查找 .ht 文件..禁用 .htaccess.. :D
AllowOverride None
并将您的内容/重写/等直接放入每个虚拟主机中。
然后选择 1、2 或 3 :D
那么你已经向“更快”迈进了一步
希望这有帮助.. :D