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

Apache 如何使用.htaccess检查缓存中是否存在文件,如果不存在,请加载普通脚本,apache,.htaccess,caching,Apache,.htaccess,Caching,在过去的一天里,我一直在摆弄.htaccess文件,但只取得了一些小的成功。我编写了一个缓存脚本,生成每个页面的缓存版本,并将其存储在www.mysite.com/cache/中,并维护实际文件的相同目录结构,但最后添加了.html。因此,如果实际文件是: www.mysite.com/blue/turtleneck 缓存文件将是: www.mysite.com/cache/blue/turtleneck.html 我需要检查缓存版本是否存在,如果存在,请加载它。如果它不存在,我需要加载实际

在过去的一天里,我一直在摆弄.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/
我一直在努力解决这个问题,非常感谢您的帮助。

使用以下规则:

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]
  • 这需要放在网站根文件夹的.htaccess文件中。如果放置在其他位置,可能需要进行一些调整

  • 规则将在重写之前检查缓存是否存在

  • 它将检查任何不存在的资源(“请勿对现有文件执行任何操作”规则将不会传递到目前为止的真实文件请求)

  • 如果您愿意,您可以取消“#不要对现有文件执行任何操作”规则——它仍然可以正常工作(根据您的应用程序/网站逻辑,可能需要这样做)

  • 如果
    /cache/
    文件夹或任何其他有问题的文件夹不是网站根目录中的实际文件夹,而是别名,那么这很可能不起作用


  • 到目前为止你有什么?我有:RewriteRule上的RewriteEngine^([^/\.]+)/?$cache/$1\.html[L]这很好用,但我需要它在子目录中工作,并且需要像你说的那样进行一些调整。