我正在使用网址重写。这里有很多好的信息,我有一个有效的解决方案,但我想做得更好。
我的有限解决方案
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的页面上使用。
答案 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]