【问题标题】:.htaccess RewriteRule performance (large amount of RegEx).htaccess RewriteRule 性能(大量 RegEx)
【发布时间】:2013-11-15 05:44:14
【问题描述】:

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

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/ 格式,因为搜索引擎已经索引了数百个 url。 =/

感谢您的建议。

【问题讨论】:

  • ^([A-Za-z]+).*foo[\w\s\+-&;#]+bar/?$

标签: php regex apache .htaccess mod-rewrite


【解决方案1】:

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

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

【讨论】:

  • 优秀。这大大提高了响应时间。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多