什么会更有效率?拥有一个RewriteRule
[OR]
个RewriteCond
列表:
RewriteCond %{QUERY_STRING} ^id=8[3-9]$ [OR]
RewriteCond %{QUERY_STRING} ^id=9[0-2]$ [OR]
RewriteCond %{QUERY_STRING} ^id=35$
RewriteRule ^index\.php$ /go-here/? [L,R=301,NC]
或多个RewriteRules
,每个都有一个RewriteCond
:
RewriteCond %{QUERY_STRING} ^id=8[3-9]$
RewriteRule ^index\.php$ /go-here/? [L,R=301,NC]
RewriteCond %{QUERY_STRING} ^id=9[0-2]$
RewriteRule ^index\.php$ /go-here/? [L,R=301,NC]
RewriteCond %{QUERY_STRING} ^id=35$
RewriteRule ^index\.php$ /go-here/? [L,R=301,NC]
我倾向于第一个选项,因为线路较少,但也许是因为参数更复杂,效率会丢失?
答案 0 :(得分:1)
如果打开重写日志记录,您会注意到的一件事是RewriteRule
中的模式首先应用 ,然后如果该模式与URI匹配,则{{ 1}}条件被检查。这意味着对于第一个选项,您总是匹配4次。但是,在第二个选项中,最多只匹配2次,最差的是匹配6次。
因此,至少使用所需匹配数量的度量,取决于您对查询字符串的预期频率。如果RewriteCond
发生批次,那么第二个选项可能会更好。如果所有id发生的几乎相同,那么第一个选项可能是最好的。
您应该考虑的另一件事是规则的可读性。如果您在第二个选项中最终拥有大量id=83
/ RewriteCond
对,则可能更难以阅读,并且当您调整/添加/删除规则时,最终可能会导致问题。
最后,您可能只想要这条规则:
RewriteRule
但我假设你选择了这些条件来说明问题,而且这不是一个现实世界的案例。