【问题标题】:htaccess rewrite image link into a short onehtaccess 将图片链接改写成短链接
【发布时间】:2013-01-29 10:16:57
【问题描述】:

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

经验:

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

【问题讨论】:

  • 这并不容易,因为 Apache 不会递归搜索匹配项。 many RewriteCond 可以确定每个目录中是否存在文件,但据我所知,每个目录路径都必须有一个。
  • 至少,如果可以的话,给我一个例子,我怎样才能从 domain.com/dir/img.jpg 重写一个 url 到 domain.com/img.jpg
  • 我根据要求添加了简单示例,以及如何使其适用于您的树结构的一些指导......

标签: apache .htaccess mod-rewrite


【解决方案1】:

要将根目录中的所有图像写入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 递归搜索的方法。

cmets 后更新:

如果需要先强制重定向任意目录下的图片出现在浏览器的根目录下,如:

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.

【讨论】:

  • 它不能解决我的问题...例如,我有这个图片链接 mydomain .com/uploads/0cfa524e_201446.jpg 我希望它显示而不显示链接中的目录名称,只是就像那个 mydomain .com/0cfa524e_201446.jpg
  • @MedHossam 见上面的补充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
相关资源
最近更新 更多