我使用以下.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/格式,因为搜索引擎已经将数百个网址编入索引。 = /
感谢您的建议。
答案 0 :(得分:1)
您不需要匹配第二个规则中的整个URI。使用简化的正则表达式尝试此规则:
RewriteRule ^([a-z]+)(?=.*?foo.*?bar) index.php?page=$1 [NC]