理论上你应该可以做到这一点。该RewriteCond
命令有一个标志-f
,可用于检查文件是否存在。你应该能够有这样的规则:
# If the file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
# off to PHP we go
RewriteRule (.*) your-code.php [L,QSA]
这里的转折是我想你是根据传入的参数来命名文件——所以上面的例子可能是thumbnails/this-is-the-image-name-200-100.gif
. 如果是这种情况,您将需要生成一个文件名以进行动态测试,并检查它而不是REQUEST_FILENAME
-- 详细信息确实特定于您的设置。如果可以的话,我会推荐某种不需要太多努力的系统。例如,您可以将缩略图存储到文件系统中的目录结构中,例如/width/height/filename
,这比在重写规则中更容易检查,modified-filename-width-height.gif
.
如果您还没有检查过,Apache 的 mod_rewrite 指南有很多不错的示例。
更新:因此,您实际上需要从外观上检查动态文件名。我认为做这样的事情最简单的方法是将你生成的文件名粘贴到环境变量中,就像这样(我从你的另一个问题中借来充实这个):
# generate potential thumbnail filename
RewriteCond %{SCRIPT_FILENAME}%{QUERY_STRING} /([a-zA-Z0-9-]+).(jpg|gif|png)w=([0-9]+)&h=([0-9]+)(&c=(true|false))
# store it in a variable
RewriteRule .* - [E=thumbnail:%1-%2-%3-%4-%6.jpg]
# check to see if it exists
RewriteCond %{DOCUMENT_ROOT}/path/%{ENV:thumbnail} !-f
# off to PHP we go
RewriteRule (.*) thumbnail.php?file_name=%1&type=%2&w=%3&h=%4&c=%6 [L,QSA]
这是完全未经测试的,并且肯定无法正常工作。我会推荐其他几件事:
另外,我给您的一个重要建议是,如果可能,请打开日志记录并设置RewriteLogLevel
为高级别。重写规则的日志可能非常复杂,但绝对可以让您了解正在发生的事情。您需要服务器访问权限才能执行此操作——如果我记得的话,您不能将日志记录配置放在 .htaccess 文件中。