我正在玩缓存。我想要的是以下逻辑:
if ( file_exist(/cache/$request_uri.txt) ){
1. show that file
2. Stop all rewrite actions, but perform other actions (like charset, error_pages)
}
else{
do whatever you normally do
}
小例子。我有以下文件
http://domain.com/example-123.htm(请求的页面)
http://domain.com/cache/example-123.htm.txt(该页面的缓存版本)
http://domain.com/someDir/example-456.htm(请求的页面)
http://domain.com/cache/someDir/example-456.htm.txt(该页面的缓存版本)
我没有让index.php解析url并构建页面,而是想显示该文件并停止。
我虽然会这样做,但事实并非如此:
RewriteCond ^cache%{REQUEST_URI}\.txt -f # check if the file exists in cache dir
RewriteRule ^(.*) /cache/$1\.txt [L] # i so, rewrite rule to it and stop
[L]
根据我的备忘单,“最后 - 停止处理规则”。如果这仅仅意味着重写规则,那就是我所需要的
我无法让它发挥作用,我可以在正确的方向上推动:)
我已经标记了一个答案作为解决方案,它确实是应该做的。我想在.htaccess文件中使用它的原因是因为这样我的index.php不会被调用,数据库也不会被调用。一种非常快速和轻便的方法
但是,这会产生一个新问题:某些项目(如菜单)可能会(通常)更改。这意味着我必须在每次更改时删除所有缓存文件,这会阻止它高效工作
为了解决这个问题,我要看看我是否可以使用一些聪明的.shtml文件来解决这个问题(可能需要允许php在shtml文件中使用)。
一旦我为那些感兴趣的人工作,我会立即更新这篇文章
答案 0 :(得分:2)
您可以尝试以下规则:
# check if the file exists in cache dir
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}cache/$1.txt -f
RewriteRule ^(.+?)/?$ /cache/$1.txt [L]