如何url-rewrite image request?

时间:2016-10-04 02:20:09

标签: image .htaccess url-rewriting

我正在使用网址重写。这里有很多好的信息,我有一个有效的解决方案,但我想做得更好。

我的有限解决方案

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RedirectMatch (.*)\.(gif|jpg|png)$ http://www.somesite.com$1.$2
RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]

以上重定向图片请求很好,但我正在用多种语言构建多个网站,我想通过以下方式进行改进:

/attachments/1/canada-flag-small.1.jpg -> http://www.somesite.com/attachments/1/1.jpg
/jointes/2/usa-petit.1001.png -> http://www.somesite.com/attachments/2/1001.png

基本上,括号内的所有扩展名(gif | jpg | png)都应重定向到http://www.somesite.com/attachments。因此,需要完全忽略图像源中的第一个标记。

图像源中的第二个标记很重要,因为它是存储图像的目录,它应该包含在重写的URL中。

应忽略图像源中图像的名称,但是名称和扩展名后面的图像的ID需要形成我们重定向到的图像名称。

如果它更容易,图像名称中不会有斜杠。

我自己的尝试导致内部服务器错误。希望有人愿意看看这个。我见过类似的例子,人们从图像ID开始,添加一个破折号,然后添加描述性图像名称。我更喜欢使用上面显示的样式,因为我会有'3-wheel-atv.333.jpg'这样的图像,我不希望图像ID出现任何混淆。

Croises提供的理想解决方案

RewriteRule ^[^/]+/([^/]+)/(?:.*?\.)?(\d+\.(gif|jpg|png))$ http://www.somesite.com/attachments/$1/$2 [NC,L]

这允许将图像存储为附件/文件夹1 / 1.jpg,但在具有源/例如/great-images/folder1/awesome-image.1.jpg的页面上使用。

1 个答案:

答案 0 :(得分:0)

尝试:

RewriteEngine on

RewriteRule ^[^/]+/([^/]+)/(?:.*?\.)?(\d+\.(gif|jpg|png))$ http://www.somesite.com/attachments/$1/$2 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]

如果您的第二个令牌,即存储图像的目录只是一个数字,您可以使用:

RewriteRule ^[^/]+/(\d+)/(?:.*?\.)?(\d+\.(gif|jpg|png))$ http://www.somesite.com/attachments/$1/$2 [NC,L]