【问题标题】:use image/media/binary file for directory index (or pretty URLs for images/media)使用图像/媒体/二进制文件作为目录索引(或漂亮的 URL 用于图像/媒体)
【发布时间】:2015-02-13 06:41:58
【问题描述】:

对于大多数 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

将返回front 文件夹中的index.jpeg 图像。因此,如果未指定格式,则默认为 JPEG 文件。然后,网址

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)解决方案持开放态度。

谢谢

【问题讨论】:

    标签: image apache .htaccess mod-rewrite rewrite


    【解决方案1】:

    假设 URL 中只有 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]
    

    【讨论】:

    • 感谢您的回答并为迟到的回复道歉。它就像一个魅力(我只是让问题变得更简单并更新了你的答案以匹配)!但是,有没有办法让这个 .htaccess 文件更通用/可重用?即如果这个 .htaccess 可以直接放在“前”和“后”目录中,而不是修改根 .htaccess 以引用每个目录,那将更有帮助。我自己一直在尝试各种更改,但到目前为止没有运气:我似乎遗漏了一些非常基本的东西,阻止我的本地 .htaccess 规则永远匹配。再次感谢。
    • 如果有帮助,请考虑接受答案。新的要求和你原来的问题有很大的不同,所以我建议你在 cmets 中打开一个新问题并将其链接到此处。
    • 对于延迟接受您的回答表示歉意。我不认为澄清问题的要求有很大不同,并且由于您的回答,我能够提出一个更通用的解决方案,我将发布。无论如何,您的解决方案肯定是解决方案的 90%。再次感谢。
    【解决方案2】:

    我只想添加一个更通用/可重复使用的@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]
    

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 1970-01-01
      • 2021-03-09
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      相关资源
      最近更新 更多