使用mod_rewrite查看常用URL的缓存版本

时间:2011-04-10 15:24:51

标签: caching mod-rewrite

我的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。如果它存在,我可以在此之前提出什么来请求我的缓存版本?

1 个答案:

答案 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,则可以将文件缓存在内存中。