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

.htaccess 如果找不到已重写的文件,如何重写该文件,.htaccess,mod-rewrite,.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文件,而不管该文

我需要重写一个图像文件的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]

有什么想法吗?谢谢。

因为在第一条规则之后,相同的规则将与新的url匹配,url已经包含“cache/”<代码>%{REQUEST_FILENAME}和其他神奇变量会相应更新。因此,不需要将“cache/”放在变量前面

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]

因为在第一个规则之后,相同的规则将与新的url匹配,所以url已经包含“cache/”<代码>%{REQUEST_FILENAME}和其他神奇变量会相应更新。因此,不需要将“cache/”放在变量前面

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]

我很确定您应该在
%{REQUEST\u FILENAME}
之前删除
缓存
,然后它就会工作。谢谢,这似乎可以工作,但现在任何未找到的文件都将重定向到该PHP脚本,而不仅仅是未找到的缓存文件。我可以通过在PHP脚本上重定向到404来解决这个问题,但我希望有一个更优雅的解决方案。实际上忽略我上面的评论,因为重写规则,它只会重写缓存文件。。。再次感谢!我留下了一个答案,以便您将问题标记为已解决。我非常确定您应该在
%{REQUEST_FILENAME}
之前删除
缓存
,然后它就会工作。谢谢,这似乎可以工作,但现在任何未找到的文件都将重定向到该PHP脚本,而不仅仅是未找到的缓存文件。我可以通过在PHP脚本上重定向到404来解决这个问题,但我希望有一个更优雅的解决方案。实际上忽略我上面的评论,因为重写规则,它只会重写缓存文件。。。再次感谢!我留下了一个答案,你可以把这个问题标记为已解决。