我的PHP站点生成动态数据库驱动代码的静态html版本,并将它们存储在名为cache的文件夹中。
这意味着当您访问say / about-us /时,请求将通过index.php?page = about-us进行路由,并生成一个名为/cache/about-us.html的文件。
如果该文件存在,则PHP包含它,然后退出。这似乎是浪费时间,为什么不只是在请求/ about-us /时获取apache来提供/cache/about-us.html,但前提是它存在。
我当前的mod_rewrite部分到目前为止只包括这个:
RewriteRule ^([A-Za-z0-9-_/\.]+)\/$ /?page=$1 [L]
哪个/ foo_bar / request写入index.php?page = foo_bar。如果它存在,我可以在此之前提出什么来请求我的缓存版本?
答案 0 :(得分:1)
首先将所有内容发送到/ cache /文件夹
RewriteRule ^([A-Za-z0-9-_/\.]+)/$ /cache/$1
然后,检查是否找不到,并重新路由
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/cache/([A-Za-z0-9-_/\.]+)$ /page?=$1 [L]
根据服务器的设置方式,您可能需要稍微更改路径(我建议使用绝对路径)。另请注意,这也适用于与RewriteRule匹配的图像
我不确定你是否会看到任何显着的性能提升 - 只是包含一个静态文件并不需要那么长时间(如果你没有点击数据库)。此外,如果您有APC,则可以将文件缓存在内存中。