1

我正在使用以下 .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。=/

感谢您的意见。

4

1 回答 1

1

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

 RewriteRule ^([a-z]+)(?=.*?foo.*?bar) index.php?page=$1 [NC]
于 2013-11-15T07:25:19.790 回答