如何使用.htaccess检查缓存中是否存在文件,如果没有则加载普通脚本

时间:2011-08-01 13:36:20

标签: apache .htaccess caching

过去一天我一直在使用.htaccess文件,但只取得了一定的成功。我编写了一个缓存脚本,它生成每个页面的缓存版本并将其存储在www.mysite.com/cache/中并保持实际文件的相同目录结构,但它会在最后添加.html。所以如果实际文件是:

www.mysite.com/blue/turtleneck

缓存文件为:

www.mysite.com/cache/blue/turtleneck.html

我需要检查缓存版本是否存在,如果存在,请加载它。如果它不存在,我需要加载实际文件。此外,我需要一些方法来强制它加载非缓存版本。我想也许可以在URL的末尾添加/nocache/来加载非缓存副本。例如:

www.mysite.com/blue/turtleneck/nocache/

我一直在努力解决这个问题,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

使用以下规则:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

# serve cached file if exists
RewriteCond %{DOCUMENT_ROOT}/cache/$1.html -f
RewriteRule (.*) /cache/$1.html [L]
  1. 这需要放在网站根文件夹中的.htaccess文件中。如果放在其他地方,可能需要进行一些调整。

  2. 规则将在重写之前检查缓存是否存在。

  3. 它将检查不存在的任何资源(“#不对现有文件执行任何操作”规则将不会传递对真实文件的请求)。

  4. 如果您愿意,您可以摆脱“#不对现有文件执行任何操作”规则 - 它仍然可以正常工作(可能需要这样做在你的应用程序/网站逻辑上。)

  5. 如果/cache/文件夹或任何其他文件夹不是网站根目录中的实际文件夹而是别名,那么这很可能无效。