将具有特定扩展名的文件重写到特定目录

时间:2016-03-10 14:51:06

标签: apache mod-rewrite

所以...我有几百万个PNG,其名称分布在一个复杂的目录结构中,其深度为15-20级,我想将它们移动到目录/ my / special / directory /

我无法通过重写(而非重定向)来找到解决方法

我试过了:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/\.]+).png?$ /my/special/directory/$1.png [R]

但这仅适用于第一级(root)。我也试过

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9/]+)([^/\.]+).png?$ /my/special/directory/$2.png [R]

但它根本不起作用。我该怎么写呢?

我正在检查图像是否存在,因为此vhost中有其他目录包含图像,并且将保持不变。

TIA

1 个答案:

答案 0 :(得分:0)

我真的不明白你尝试的模式:^([^/\.]+).png?$ ...

为什么最后??为什么明确拒绝文件名中的点?这只适用于“第一级”的原因当然是你明确拒绝接受包含/的路径,这恰好是文件夹分隔符......

此外,只需使用[L]代替[R],因为您不需要重定向。

这给了我们:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.png$ /my/special/directory/$1.png [L]

如果您必须重写以便仅捕获文件名(实际上取决于链接的结构),这可能是一个良好的开端:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /?([^/]+)\.png$ /my/special/directory/$1.png [L]

注意:第二个版本中没有前导^,因为您对最后一个文件夹分隔符之前指定的路径不感兴趣...