最佳 mod_rewrite 正则表达式。正则表达式中匹配模式的排列方式重要吗?

最佳 mod_rewrite 正则表达式。正则表达式中匹配模式的排列方式重要吗?

我有以下内容:

RewriteRule ([a-zA-Z0-9]{5})?/load_page/([0-9]+)

对于正则表达式来说,哪种安排是最佳的:

RewriteRule ^/([a-zA-Z0-9]{5})?/load_page/([0-9]+)

或者

RewriteRule ^/load_page/([a-zA-Z0-9]{5})?/([0-9]+)

或者

RewriteRule ^/([a-zA-Z0-9]{5})?/([0-9]+)/load_page

谢谢

答案1

我认为你的情况并没有明显的差异。

想要确定吗?使用 Apache Benchmark、Siege、JMeter 或您想要使用或熟悉的任何基准测试工具对它们进行基准测试。

答案2

Janne 可能是对的,差异可以忽略不计,并且你不应该在没有基准测试的情况下进行优化。

无论如何,要回答这个问题,它应该取决于请求的 URL。我猜大多数请求的 URL 没有以 开头的路径/load_page。在这种情况下,以 开头的正则表达式可能^/load_page会稍微快一些,因为它可以通过比较前几个字符而不必回溯来快速排除许多不匹配的字符串。因此,如果您请求,它会将与/foo进行比较,看到不匹配并在比较一两个字符后放弃。fl

对于其他正则表达式,它会看到/foo并认为“我看到了一些好的字母数字”,并且只有在意识到正则表达式的其余部分不匹配后才会中止。

相关内容