【发布时间】: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