apache动静分离最直接方式是按文件扩展名区分,通过addtype/addhandler明确绑定动态后缀(如.php)给脚本引擎,其余默认静态直出;需避免误配.html/.js/.css等静态后缀,辅以.htaccess守门规则防止重写误伤静态资源。

Apache 基础的动静分离,按文件扩展名区分是最直接、最稳定的方式。它不依赖复杂路由或代理,而是靠 Apache 内置的处理器绑定机制:明确告诉服务器哪些后缀交给脚本引擎处理,其余一律当静态文件直出。
明确声明动态后缀并绑定处理器
只对真正需要执行的文件类型启用处理器,比如 .php 或 .phtml。其他如 .html、.js、.css、.png 等默认就是静态,无需额外配置,更不能误加处理器。
# 启用 PHP 处理器(以 PHP 为例) AddType application/x-httpd-php .php .phtml AddHandler application/x-httpd-php .php
这样 /index.php 会由 PHP 解释器运行;而同目录下的 /style.css、/logo.png、/main.js 则直接读取文件内容返回,不经过任何脚本解析。
⚠️ 关键提醒:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 不要给
.html加AddHandler,否则所有 HTML 文件都会被当作 PHP 执行,可能报错或暴露源码; -
.js、.css同理,加了就可能触发解析失败或安全风险; - 如果用了其他语言(如 Python 的
.py),也只绑定对应后缀,且确保对应模块(如mod_python)已启用并配置正确。
确保静态后缀不被意外覆盖
有些项目会在 .htaccess 里写重写规则,比如 Laravel 的入口统一转发到 index.php。若没防护,静态资源也可能被重写进去,导致图片乱码或 500 错误。
在 .htaccess 开头加上这两条“守门”规则:
# 如果请求路径真实存在对应文件,立即终止重写,直接返回
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# 再补充常见静态后缀兜底(大小写不敏感)
RewriteCond %{REQUEST_URI} \.(?:css|js|png|jpg|gif|ico|svg|woff2?)$ [NC]
RewriteRule ^ - [L]
这两步构成“先看是否存在 → 再看是否是静态后缀 → 最后才走动态逻辑”的三层判断,能有效避免误处理。
验证是否生效
访问一个 .php 文件(如 /test.php),响应头中应有 X-Powered-By: PHP/...;
访问一个 .js 文件(如 /app.js),响应头中不应出现 X-Powered-By,Server 字段应为 Apache,状态码为 200,内容正常加载。
不复杂但容易忽略










