You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache htaccess按查询字符串配置访问规则时文件夹不显示文件列表

问题描述
  • 基于Apache htaccess配置访问规则,要求URL携带值为123的token查询参数时,才允许访问目标文件夹
  • 目标文件夹内无html、php类网页文件,仅存放mp3格式音频文件
  • 配置生效后,直接访问文件夹内的单个mp3文件可正常打开,但访问文件夹根路径时,渲染出的目录文件列表为空,异常效果如下:
    空目录列表截图
故障原因

配置的参数校验规则拦截范围覆盖了Apache目录索引模块(mod_autoindex)的内部请求:该模块负责扫描目录文件、生成文件列表,执行扫描动作时属于服务器内部子请求,不会继承访问URL上携带的token=123参数,直接被权限规则拦截,最终渲染出来的文件列表为空。直接访问单个mp3文件属于外部请求,携带合法token即可正常通过校验。

修复步骤

将目标文件夹下的.htaccess文件内容替换为以下规则即可:

# 开启目录浏览,配置索引展示规则
Options +Indexes
IndexOptions FancyIndexing NameWidth=* HTMLTable Charset=UTF-8
# 目录列表仅展示mp3格式文件
IndexIgnore *
IndexIgnore *.mp3

RewriteEngine On
# 放行目录索引模块的内部扫描子请求,解决列表为空问题
RewriteCond %{IS_SUBREQ} ^true$
RewriteRule ^ - [L]

# 核心访问校验:未携带正确token直接返回403
RewriteCond %{QUERY_STRING} !(^|&)token=123(&|$) [NC]
RewriteRule ^ - [F,L]

# 可选配置:自动给目录列表内的mp3链接追加token参数,点击无需手动补参数
<IfModule mod_headers.c>
    <IfModule mod_substitute.c>
        AddOutputFilterByType SUBSTITUTE text/html
        Substitute "s|(href=\"[^\"]+\.mp3)\"|$1?token=123\"|i"
    </IfModule>
</IfModule>

配置前提:站点对应目录的AllowOverride配置需设置为All,确保htaccess规则可覆写目录配置;如果服务器未加载mod_substitute模块,可删掉可选配置段,访问文件时手动在URL后拼接?token=123即可正常访问。

配置完成后清理浏览器缓存,携带?token=123参数访问文件夹根路径即可看到完整的mp3文件列表。

内容的提问来源于stack exchange,提问作者user19419156

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:15:33