htaccess将图像链接重写为一个简短的链接

时间:2013-01-16 14:41:08

标签: apache .htaccess mod-rewrite

我想在地址栏中将图片链接重写为新的短片。 我的网站包含许多不同位置的图像。 所以我想显示所有图像,因为它在同一目录中:

经验:

domain.com/dir1/dir2/img1.jpg => domain.com/img1.jpg

domain.com/dir/img2.gif => domain.com/img2.gif

domain.com/dir1/dir2/dir3/dir4/img3.png => domain.com/img3.png

有可能吗?!或者我必须使用index.php ??

上传主目录中的所有图像

1 个答案:

答案 0 :(得分:0)

要将根目录中的所有图像写入dir,请使用以下命令。您可以根据需要将其他图片扩展名添加到群组(jpe?g|png|gif)中。如果您能将所有图片移至dir/

,请使用此选项
RewriteEngine On
RewriteRule ^/?([^.]+)\.(jpe?g|png|gif)$ dir/$1.$2 [L]

为了使您的原创想法有效,我能想到的唯一方法是使用RewriteCond检查给定图像的每个可能目录。它将通过每个规则,直到匹配:

RewriteEngine On

# Does the file exist in dir1? (-f)
RewriteCond dir1/${REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.(jpe?g|png|gif)$ dir1/$1.$2 [L]
# Does it exist in dir1/sub1 ?
RewriteCond dir1/sub1/${REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.(jpe?g|png|gif)$ dir1/sub1/$1.$2 [L]
# Does it exist in dir2/sub1/sub2 ?
RewriteCond dir1/sub1/${REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.(jpe?g|png|gif)$ dir2/sub1/sub2/$1.$2 [L]
# And on and on for each directory which may have images....

显然,这不容易维护,如果你有超过5-6个目录,它就完全失控了。我只是不知道另一种方法来递归地进行apache搜索。

评论后更新:

如果您需要首先强行重定向任何目录中的图像以显示在浏览器内的根目录中,如:

example.com/uploads/0cfa524e_201446.jpg --> example.com/0cfa524e_201446.jpg

之前放置以下规则上面的规则。它将强制重定向,并且在重定向之后,后续规则之一应匹配并提供文件。

# Redirect any image file which is requested _inside_ a directory to appear at the root
RewriteRule ^/?.+/([^.]+)\.(jpe?g|png|gif)$ http://%{HTTP_HOST}/$1.$2 [L,R=301]

#... then add all the rules from above.