-1

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

经验:

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 上传主目录中的所有图像??

4

1 回答 1

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.
于 2013-01-17T00:32:02.910 回答