对于大多数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)解决方案持开放态度。
感谢
答案 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文件中。