使用 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,他为回答问题做了大部分工作。
对于大多数 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,他为回答问题做了大部分工作。