Apache-2.2

.htaccess 正則表達式以獲得最佳性能?

  • November 13, 2010

在我的 .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/ 應該是等價的,並且由於正則表達式是從左到右解析的,我也認為 ^ 沒有區別。

我確實用 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`

引用自:https://serverfault.com/questions/201465