htaccess->如果在缓存目录中显示文件,如果不继续

时间:2013-11-14 09:06:19

标签: regex apache .htaccess caching mod-rewrite

我正在玩缓存。我想要的是以下逻辑:

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文件中使用)。
一旦我为那些感兴趣的人工作,我会立即更新这篇文章

1 个答案:

答案 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]