将image / media / binary文件用于目录索引(或图像/媒体的漂亮URL)

时间:2015-01-26 23:14:31

标签: image apache .htaccess mod-rewrite rewrite

对于大多数web / http服务器,默认情况下,如果在路径中指定了目录并包含索引文件,则返回名称为index.{html,php}的文件。

我想知道是否可以返回图像或其他内容而不是索引文件?例如对于此目录结构

releases
releases/album/
releases/album/covers/
releases/album/covers/front/index.jpeg
releases/album/covers/front/index.pdf
releases/album/covers/front/index.png
releases/album/covers/back/index.jpeg
releases/album/covers/back/index.pdf
releases/album/covers/back/index.png

网址

http://server.org/releases/album/covers/front

会返回index.jpeg文件夹中的front图片。因此,如果未指定格式,则JPEG文件是默认值。然后,URL

http://server.org/releases/album/covers/front/pdf

将返回位于该文件夹中的index.pdf版本,同样也会返回

http://server.org/releases/album/covers/front/png

index.png文件。同上back文件夹。你明白了;)

另外,我希望实际的index.*无法访问。因此资源只能通过漂亮/目录URL获得。

这是一个静态网站,所以我更愿意仅使用htaccess配置解决此问题。但是,我也对服务器端脚本(例如node.js,PHP)解决方案持开放态度。

感谢

2 个答案:

答案 0 :(得分:1)

假设只有网址的album部分不同,您可以使用以下.htaccess

RewriteEngine on

# Block direct index requests
RewriteCond %{THE_REQUEST} \ /releases/[^/]+/covers/front/((pdf|png)/)?index\.(jpeg|pdf|png)\s [NC]
RewriteRule ^ - [F]

# Resolve pretty URLs
RewriteRule ^(releases/[^/]+/covers/front)/?$ /$1/index.jpeg [NC,L]
RewriteRule ^(releases/[^/]+/covers/front)/(pdf|png)/?$ /$1/$2/index.$2 [NC,L]

答案 1 :(得分:1)

我想添加一个更通用/可重复使用的@Ravi Thapliyal解决方案版本:

RewriteEngine on

# block direct index file image requests in current directory
RewriteCond %{THE_REQUEST} \ ?index\.(jpeg|pdf|png)\s [NC]
RewriteRule ^ - [F]

# Resolve pretty URLs in current directory
# by default return JPEG version
RewriteRule ^/?$ index.jpeg [NC,L]
# accept either jpg or jpeg for JPEG version
RewriteRule ^/?(jpg|jpeg)/?$ index.jpeg [NC,L]
# for other types, return appropriate 
RewriteRule ^/?(pdf|png)/?$ index.$1 [NC,L]

现在可以在任何目录中删除这些重写规则,以使该目录服务于原始问题中描述的索引。{jpeg,jpg,png,pdf}图像文件(即具有漂亮的URL)。对于问题中定义的特定目录结构,这将意味着将这些规则放在releases/album/covers/front/releases/album/covers/back/目录中的.htaccess文件中。

再次感谢@Ravi Thapliyal,他在回答这个问题时完成了大部分工作。