如果找不到已重写的文件,如何重写该文件

时间:2015-10-15 11:16:36

标签: .htaccess mod-rewrite

我需要重写图像文件的URL。这是一个简单的部分,看起来像这样:

RewriteRule ^img[/]?(/[^.]+)?$ - [L]
RewriteRule ^img/([A-Za-z0-9_-\s]+)/([A-Za-z0-9_\-\s\.]+)?$ cache/$1-$2 [L]

但是如果在该缓存目录中找不到图像文件,我需要再次将其重写为PHP脚本,该脚本将创建图像并将其保存在该缓存目录中。

我尝试了以下重写,但它并没有按预期工作。相反,无论文件是否存在于缓存中,所有图像URL都会被重写为PHP文件。

#RewriteCond cache/%{REQUEST_FILENAME} !-f
#RewriteCond cache/%{REQUEST_FILENAME} !-d
#RewriteRule ^cache/([A-Za-z0-9_\s]+)-([A-Za-z0-9_\-\s\.]+)?$ createimg.php?type=1&hash=$1&filename=$2 [L]

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

由于在第一条规则之后,相同的规则将与新网址匹配,网址已经包含"缓存/"。 %{REQUEST_FILENAME}和其他魔术变量会相应更新。因此,您不需要放置"缓存/"在变量前面。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cache/([A-Za-z0-9_\s]+)-([A-Za-z0-9_\-\s\.]+)?$ createimg.php?type=1&hash=$1&filename=$2 [L]