使用 image/media/binary 文件作为目录索引(或 images/media 的漂亮 URL)

use image/media/binary file for directory index (or pretty URLs for images/media)

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

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

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

URL

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

将 return index.jpeg 图像放在 front 文件夹中。因此,如果未指定格式,则默认使用 JPEG 文件。然后,URL

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

return index.pdf 版本会位于该文件夹中,同样

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

index.png 文件。 back 文件夹也是如此。你明白了 ;)

另外,我希望实际的 index.* 无法访问。因此资源只能通过 pretty/directory URLs.

获得

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

谢谢

假设只有 album 部分 URL 不同,您可以使用以下 .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)/?$ //index.jpeg [NC,L]
RewriteRule ^(releases/[^/]+/covers/front)/(pdf|png)/?$ ///index. [NC,L]

我只想添加更多 generic/reusable 版本的@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. [NC,L]

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

再次感谢@Ravi Thapliyal,他为回答问题做了大部分工作。