【问题标题】:How to check if a file exists in cache using .htaccess, load normal script if not如何使用.htaccess检查文件是否存在于缓存中,如果不存在则加载正常脚本
【发布时间】:2011-08-01 13:36:19
【问题描述】:

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

www.mysite.com/blue/turtleneck

缓存文件是:

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

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

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

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

【问题讨论】:

  • 到目前为止你有什么?
  • 我有:RewriteEngine On RewriteRule ^([^/\.]+)/?$ cache/$1\.html [L]

标签: apache .htaccess caching


【解决方案1】:

使用这些规则:

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. 它将检查任何不存在的资源("# do not do anything for already existing files" 规则不会传递对真实文件的请求)。

  4. 如果你愿意,你可以去掉 "# do not do anything for already existing files" 规则——它仍然可以正常工作(可能需要这样做基于在您的应用/网站逻辑上)。

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

【讨论】:

  • 这很好,但我需要它在子目录中工作,并且需要像你说的那样进行一些调整。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多