我正在为动态生成的图像实现一个缓存系统。该脚本通过 调用/img/type/param1/param2.png
,其中可以有多种类型并且参数的数量是可变的。该脚本生成图像并将其转储到磁盘。
我想要.htaccess
规则,在请求图像生成脚本时:
- 检查是否存在缓存文件
- 如果是这样,mod_rewrite 到缓存文件
- 如果不是,请不要执行任何操作以使脚本运行
到目前为止,我有一个稍微修改过的逻辑:
- mod_rewrite 到缓存文件的位置
- 检查文件是否存在
- 如果不是,则 mod_rewrite 再次返回请求
如果有更好的方法来做到这一点,我很想听听。无论如何,我的 .htaccess 文件的相关部分:
RewriteRule ^img/(type1|type2)/(.*)$ /images/cache/$1/$2
RewriteCond /^(.*)$ !-f
RewriteRule images/cache/(.*) /img/$1
这似乎不太正确。为了调试它,我在第一个 RewriteRule 之后插入了以下内容(目标页面只是转储其输入):
RewriteRule ^(.*)$ /htaccess.php?url=$1 [END]
结果,我得到:
Array
(
[url] => /images/cache/a/l/300.png/a/l/300.png
)
我不明白为什么$2
containsl/300.png/a/l/300.png
而不是 just l/300.png
。
如果我将第一个 RewriteRule 更改为包含一个[L]
,我会得到预期的结果。但是,我在第二个 RewriteRule 上遇到了完全相同的“双重匹配”问题,它将请求恢复为非缓存版本。但是,添加[L]
到第二个 RewriteRule:
RewriteRule ^img/(type1|type2)/(.*)$ /images/cache/$1/$2 [L]
RewriteCond /^(.*)$ !-f
RewriteRule images/cache/(.*) /img/$1 [L]
产生内部服务器错误。
我做错了什么,我该如何解决这个问题?