.htaccess在不知道扩展的情况下重写图像

时间:2014-06-09 16:43:16

标签: regex image apache .htaccess mod-rewrite

我有一个网址,我需要指向一个特定的图像文件。永远不会有2个具有相同名称但只是不同扩展名的图像。

基本上有子目录只有图像。图像的网址将类似于example.com/uploads/abc12345/,其中abc12345是关键。在服务器上,此图像名为abc12345.jpg,但从用户端开始,我不知道图像的扩展名。因此,图片可以是abc12345.pngabc12345.gif等等,以便进行一些图片扩展。

我已尝试过以下内容,适用于jpg s,但不适用于任何其他扩展程序。我不确定如何在服务器上找到图像的扩展名并使用该扩展名或迭代所有扩展名,直到RewriteCond %{REQUEST_FILENAME} !-f为假。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^uploads/(.*)/$ $1.jpg

除了使用.htaccess外,我可以轻松地使用php,但想知道没有它是否可行。

仅针对此用例,我们可以说可能的扩展名为:jpgpnggiftiffbmp

1 个答案:

答案 0 :(得分:4)

需要使用一系列重写规则(每个图像扩展一个):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1\.jpg -f [NC]
RewriteRule ^uploads/([^/]+)/?$ /$1.jpg [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1\.gif -f [NC]
RewriteRule ^uploads/([^/]+)/?$ /$1.gif [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1\.jpeg -f [NC]
RewriteRule ^uploads/([^/]+)/?$ /$1.jpeg [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1\.tiff -f [NC]
RewriteRule ^uploads/([^/]+)/?$ /$1.tiff [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1\.png -f [NC]
RewriteRule ^uploads/([^/]+)/?$ /$1.png [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1\.bmp -f [NC]
RewriteRule ^uploads/([^/]+)/?$ /$1.bmp [L,NC]