Apache的<Directory>标签不直接实现重定向或授权,而是作为作用域容器,需配合Redirect或RewriteRule指令才能跳转,并必须通过Require显式授权;路径须为绝对路径且严格匹配DocumentRoot,多目录按最长匹配生效。

Apache 的 <Directory> 标签不直接决定“能不能跳转”,而是划定权限与行为边界的容器。它本身不执行重定向,但必须配合 Redirect 或 RewriteRule 才能实现路径跳转;它也不直接“给权限”,而是通过 Require 显式放行、再叠加 Options 和 AllowOverride 收紧能力边界。
路径必须绝对且严格匹配 DocumentRoot
<Directory> 块只对当前虚拟主机生效,路径必须是文件系统中的绝对路径,并与该站点的 DocumentRoot 完全一致(建议都不加末尾斜杠):
- 若
DocumentRoot "/var/www/example.com",就写<Directory "/var/www/example.com"> - 不能简写为
<Directory "/var/www">——这会跨目录匹配,对当前站点无效 - 上传目录等子路径需单独定义:
<Directory "/var/www/example.com/uploads"> - 多个
<Directory>共存时,Apache 按最长路径优先匹配
Require 是唯一授权机制,必须显式声明
Apache 2.4+ 已完全废弃 Order/Allow/Deny,任何遗漏 Require 都会导致 403 拒绝访问:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
Require all granted:开放所有请求(仅限内网或测试环境) -
Require ip 192.168.1.0/24:仅允许可信局域网段 -
Require local:只允许本机(127.0.0.1和::1) - 要实现“全放行但排除某 IP”,需用
<RequireAll>包裹:
<RequireAll><br> Require all granted<br> Require not ip 192.168.5.100<br> </RequireAll>
重定向不能直接写在 Directory 里,但可嵌套使用
<Directory> 是作用域容器,重定向指令需在其内部调用,且依赖模块支持:
- 简单路径跳转用
Redirect:无需开启重写引擎,语法简洁
示例:Redirect permanent /old /new(访问/old/page.html→ 跳到/new/page.html) - 复杂逻辑(如强制 HTTPS、多条件判断)必须用
RewriteRule:
需确认已启用mod_rewrite,并在块中设置AllowOverride FileInfo或All,再写RewriteEngine On - 注意:
Redirect后的第一个参数是 URI 路径前缀,不是服务器路径;RewriteRule的正则匹配也基于请求 URI,而非磁盘路径
功能限制比访问控制更关键:Options 和 FilesMatch
Options 和 AllowOverride 不管“谁来”,而管“来了能干啥”:
-
Options -Indexes +FollowSymLinks:禁用目录列表(防结构泄露),允许符号链接 -
Options None:最严模式,禁用所有扩展(静态资源目录推荐) -
AllowOverride None:禁止 .htaccess 覆盖,提升性能与安全(生产首选) - 上传目录必须额外阻断脚本执行:
<FilesMatch "\.(php|pl|py|jsp|sh|cgi)$"><br> Require all denied<br> </FilesMatch>

















