![最佳 mod_rewrite 正则表达式。正则表达式中匹配模式的排列方式重要吗?](https://linux22.com/image/555797/%E6%9C%80%E4%BD%B3%20mod_rewrite%20%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E3%80%82%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E5%8C%B9%E9%85%8D%E6%A8%A1%E5%BC%8F%E7%9A%84%E6%8E%92%E5%88%97%E6%96%B9%E5%BC%8F%E9%87%8D%E8%A6%81%E5%90%97%EF%BC%9F.png)
我有以下内容:
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
进行比较,看到不匹配并在比较一两个字符后放弃。f
l
对于其他正则表达式,它会看到/foo
并认为“我看到了一些好的字母数字”,并且只有在意识到正则表达式的其余部分不匹配后才会中止。