.htaccess RewriteRule性能(大量RegEx)

时间:2013-11-15 05:44:14

标签: php regex apache .htaccess mod-rewrite

我使用以下.htaccess规则在我的网站上重写多个网址:

RewriteEngine On
RewriteRule ^privacy(\w|\s|\+|-|&|;|#)+policy/?$ index.php?page=privacy [NC]
RewriteRule ^([A-Za-z]+)(.*)+foo(\w|\s|\+|-|&|;|#)+bar/?$   index.php?page=$1 [NC]

第一条规则适用于“隐私政策”页面。

然而,第二条规则导致服务器响应时间明显变差。我相信这条规则的编写方式导致查询我的数据库([A-Za-z] +)表达式的延迟。有大量的RegEx适用于此规则,并且一些URL在RegEx之后包含“额外”字词。例如:

www.example.com/North+America+Foo+Bar/

在数据库中查询“North”以将URL重写为

www.example.com/index.php?page=North

这就是我在规则中包含(。*)的原因,但我担心这是响应时间慢的罪魁祸首。很复杂,我知道。

改善此规则以获得更快性能的任何想法或建议?我希望保留www.example.com/Expression+Foo+Bar/格式,因为搜索引擎已经将数百个网址编入索引。 = /

感谢您的建议。

1 个答案:

答案 0 :(得分:1)

您不需要匹配第二个规则中的整个URI。使用简化的正则表达式尝试此规则:

 RewriteRule ^([a-z]+)(?=.*?foo.*?bar) index.php?page=$1 [NC]