在我的.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]
问题是,这三种方法中的哪一种最适合服务器性能?
谢谢!
据我所知,这些之间几乎没有性能差异。 从逻辑上讲,/.*badbot/和/ badbot /应该是等价的,并且正则expression式从左到右被parsing,我也会认为^没有任何区别。
我用Perl(这可能会使用一个稍微不同的正则expression式引擎mod_rewrite)testing这些,它显示/ badbot /比其他更快,但这可能是我所使用的string。 另外,请记住,USER_AGENT的最大长度为200,这可能是不必要的优化。 将这些放在httpd.conf而不是.htaccess中可以获得更多的优化。
我从testing中得到的结果是:
[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
如果您寻找最佳性能…首先有Apache忽略/跳过寻找.ht文件..禁用.htaccess ..:D
AllowOverride None
并把你的东西/重写/等直接在每个虚拟主机..
然后select1,2或3:D
那么你已经迈出了“更快”的一步,
希望这有助于..:D