如果HTaccess包含所请求的文件,则使用HTaccess重定向到子文件夹

时间:2015-09-22 00:00:28

标签: php apache .htaccess redirect caching

我尝试从数据库加载一些内容,并将其缓存在服务器上的文件夹中。目前,我使用此代码捕获http://localhost/files/hash.png的请求,并将散列和文件类型传递给返回数据的PHP文件。

文件可以有任何扩展名,所以我需要捕获完整的文件名(这很好),或者将其拆分为名称和扩展名(也很好)。

这是我的HTaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^files/([^\.]+)\.([^\.]+)$ getfile.php?hash=$1&ext=$2 [NC,L]

问题是,我现在需要告诉它尝试在名为hash.png的{​​{1}}子文件夹中找到files(即cache)。如果文件存在于该文件夹中,则需要加载而不是PHP文件。

有人可以帮忙吗?我努力让它发挥作用。这是对存储在数据库中的文件进行一种缓存。

1 个答案:

答案 0 :(得分:1)

pid

这里重写文件名以在测试之前改变RewriteEngine On RewriteRule ^files/(.*) files/cache/$1 [NC] RewriteCond %{REQUEST_FILENAME} -f RewriteRule *. - [L] RewriteRule ^files/cache/(.*) files/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^files/([^\.]+)\.([^\.]+)$ getfile.php?hash=$1&ext=$2 [NC,L] 的路径是否存在。如果存在,请不要更改文件名并停止规则(使用file/cache/)。如果它不存在,请将文件名重写回原来的名称,并继续使用您已有的规则。