2011-08-01 28 views
1

我一直在使用.htaccess文件过去一天,但只有适度的成功。我编写了一个缓存脚本,用于生成每个页面的缓存版本并将其存储在www.mysite.com/cache/中,并保持与实际文件相同的目录结构,但它将.html添加到最后。因此,如果实际的文件是:如何使用.htaccess检查文件是否存在于缓存中,如果不是,则加载正常脚本

www.mysite.com/blue/turtleneck 

缓存文件将是:

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

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

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

我一直在努力与此和任何帮助将非常感激。

+0

到目前为止你有什么? – LazyOne

+0

我有: RewriteEngine在 RewriteRule ^([^/\。] +)/?$缓存/ $ 1 \ .html [L] –

回答

2

使用这些规则:

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/文件夹或其他任何文件夹不是网站根目录中的实际文件夹,而是别名,那么这很可能不起作用。

+0

这很好,但我需要它在一个子目录中工作,它需要一点点有点像你说的那样调整。 –

相关问题