要将根目录中的所有图像写入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.