options指令用于控制apache特定目录启用的服务器特性,如indexes(显示目录列表)、followsymlinks(跟随符号链接)、execcgi(执行cgi脚本)等,影响访问响应方式而非访问权限,支持none、all及增量符号+/-配置。
linux apache http server 的 options 指令用于控制特定目录下启用哪些服务器特性,它直接影响用户访问行为(如能否看到目录列表、是否允许符号链接、能否执行脚本等)。该指令不决定“能否访问”,而是决定“以什么方式响应访问”。配置位置包括主配置文件(httpd.conf 或 apache2.conf)、虚拟主机块、<directory></directory> 容器,甚至 .htaccess(需配合 allowoverride all)。
常用 Options 参数及其实际影响
每个参数代表一项功能开关,可单独使用,也可组合。注意:大小写不敏感,但参数间用空格分隔。
- None:禁用所有特性。这是最严格的设置,目录中不会生成索引页、不跟随符号链接、不启用内容协商等。
-
All:启用除
MultiViews外的所有标准特性(即等价于Indexes FollowSymLinks SymLinksIfOwnerMatch ExecCGI Includes等的集合)。不是“全部功能”,而是历史默认值。 -
Indexes:当请求的是一个目录,且该目录下没有匹配
DirectoryIndex(如index.html)的文件时,Apache 自动生成并返回该目录下的文件列表。开启此选项可能暴露敏感文件结构,生产环境通常禁用。 -
FollowSymLinks:允许 Apache 跟随符号链接(symlink)访问真实路径。例如,
/var/www/html/test是指向/home/user/data的软链,启用后可正常访问其内容。注意:若出现在<location></location>块中将被忽略。 -
SymLinksIfOwnerMatch:比
FollowSymLinks更安全——仅当符号链接与其目标文件/目录属同一用户时才跟随。适合多用户共享环境,防止越权跳转。 -
ExecCGI:允许在该目录下执行 CGI 脚本(如
.pl、.cgi文件)。需同时加载mod_cgi模块,并配合AddHandler cgi-script .pl等设置才生效。 -
Includes(或
IncludesNOEXEC):启用服务端包含(SSI),支持<!--#include file="header.html" -->类语法。IncludesNOEXEC禁止执行命令(如#exec),更安全。 -
MultiViews:启用内容协商。例如请求
/file,而目录中有file.html和file.jpg,Apache 会根据客户端Accept头自动选择返回 HTML 还是图片。需加载mod_negotiation模块。
符号 + 和 – 的增量控制方式
Options 支持用 + 和 - 对已有配置做增减,避免重复罗列全部参数。适用于继承场景(如子目录想在父目录基础上关闭某项)。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
Options +Indexes -ExecCGI:在当前继承值基础上,强制开启Indexes,同时禁用ExecCGI。 -
Options -FollowSymLinks +SymLinksIfOwnerMatch:禁用普通符号链接,改用更安全的属主匹配模式。 - 单独写
Options +All或Options -All是无效的,All不是基础集,不能直接加减。
典型安全配置建议
生产环境中应遵循最小权限原则,避免意外暴露或执行风险:
- 网站根目录通常设为:
Options FollowSymLinks(允许必要软链)+AllowOverride None(禁用 .htaccess)+Require all granted(Apache 2.4 权限语法)。 - 上传目录或用户数据目录建议:
Options -Indexes -ExecCGI -Includes,防止目录遍历和代码执行。 - CGI 脚本目录必须显式启用:
Options +ExecCGI,并确保AddHandler cgi-script .cgi已配置,否则脚本会被当作纯文本下载。 - 调试阶段临时启用索引?可用
Options +Indexes快速查看,上线前务必移除。
验证与排错要点
修改后需重载配置,且需关注模块是否已启用:
- 运行
sudo apache2ctl configtest(Debian/Ubuntu)或sudo httpd -t(RHEL/CentOS)检查语法。 - 若启用
Indexes却未显示列表,请确认:① 目录下无index.*文件;②mod_autoindex已加载;③ 没有更高优先级的Options None覆盖。 - 符号链接 403 报错?检查 SELinux 是否拦截(RHEL系可临时
setenforce 0测试),或确认目标路径权限是否允许 Apache 用户(如www-data或apache)读取。 -
MultiViews导致 406 Not Acceptable?说明协商失败,建议明确指定资源路径,或关闭该选项。










