什么是.htaccess RewriteRule最佳实践?

时间:2010-05-20 00:09:35

标签: apache .htaccess mod-rewrite

使用一堆RegEx或多个规则的RewriteRule是否更好,服务器要查询的RegEx更少?会有任何性能差异吗?

Heres是一个单一规则的示例,几乎所有RegEx组都是可选的:

 RewriteRule ^gallery/?([\w]+)?/?([\w]+)?/?([\d]+)?/?([\w]+)/?$ /gallery.php?$1=$2&start=$3&by=$4 [NC]

以下是一些可替代上述规则的规则列表:

RewriteRule ^gallery/category/([\w]+)/$ /gallery.php?category=$1& [NC]
RewriteRule ^gallery/category/([\w]+)/([\d]+)/$ /gallery.php?category=$1&start=$2 [NC]
RewriteRule ^gallery/category/([\w]+)/([\d]+)/([\w]+)/$ /gallery.php?category=$1&start=$2&by=$3 [NC]
...
RewriteRule ^gallery/tag/([\w]+)/$ /gallery.php?category=$1& [NC]
RewriteRule ^gallery/tag/([\w]+)/([\d]+)/$ /gallery.php?category=$1&start=$2 [NC]
RewriteRule ^gallery/tag/([\w]+)/([\d]+)/([\w]+)/$ /gallery.php?category=$1&start=$2&by=$3 [NC]
...

我很高兴听到您的选择或个人经历。

1 个答案:

答案 0 :(得分:2)

并不是说我已经对任何事情进行了基准测试,但我认为如果功能相同,则单个重写规则比几个更有效。

无论如何,重写规则(甚至数百个)很少会有显着的性能损失(我几年前就读过这个基准),除非他们代理请求或统计路径。

总而言之,我建议你选择更具可读性的内容。

在您的具体示例中,我认为单个正则表达式比复制更具可读性。但是,它们并不等同 - 第一个总是包含所有参数。如果这有所不同(很可能没有),复制可能更好。