PHP本身不直接管理虚拟目录缓存,实际由Web服务器(Nginx/Apache)或OPcache分层实现:服务器对静态资源强缓存需确保路径参与缓存键计算,OPcache按绝对路径缓存字节码且依赖SCRIPT_FILENAME正确解析,反代/CDN层须显式包含$uri等路径变量防混淆,调试时应禁用浏览器与OPcache缓存。

PHP 本身不直接管理虚拟目录的缓存,所谓“虚拟目录缓存”实际是 Web 服务器(如 Nginx、Apache、IIS)或 PHP 运行时(OPcache)对静态资源、脚本字节码或响应结果的缓存行为。提升访问性能的关键,在于分层配置:让服务器快速返回静态文件,让 PHP 快速执行并复用编译结果,同时避免因缓存机制与虚拟目录路径逻辑冲突导致 404 或 502。
Web 服务器层:静态资源强缓存
对 CSS、JS、图片等静态文件启用长期缓存,可大幅降低重复请求压力。注意虚拟目录路径需参与缓存键计算,否则跨目录同名文件可能误命中。
-
Nginx:在对应
location块中添加
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
-
Apache:在虚拟目录的
<directory></directory>或<location></location>块内启用mod_expires
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
立即学习“PHP免费学习笔记(深入)”;
- 确保
alias或Alias指向的物理路径下真实存在这些文件,否则缓存会固化 404 响应
PHP 层:OPcache 全局启用且不依赖路径别名
OPcache 缓存的是 PHP 脚本编译后的字节码,它按文件绝对路径索引。只要虚拟目录映射后的 PHP 文件能被正常解析(即 SCRIPT_FILENAME 正确拼接),OPcache 就自动生效,无需为虚拟目录单独配置。
- 确认
php.ini中已启用:
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000 - Windows 下若用 Nginx + php-cgi,必须设
cgi.fix_pathinfo=1,否则 OPcache 可能因路径解析失败而跳过缓存 - 修改后需重启 PHP-CGI 进程(非仅 reload Nginx),否则新配置不加载
反向代理/CDN 层:谨慎设置缓存键
若前端有 Nginx 反代、Cloudflare 或自建 CDN,其缓存键默认不含 URL 路径前缀(如 /admin)。若多个虚拟目录共用同一后端,需显式将 $request_uri 或路径段纳入缓存键,防止 /api/user 和 /admin/user 缓存混淆。
- Nginx 反代示例(在 proxy_pass 上游前):
proxy_cache_key "$scheme$request_method$host$uri$is_args$args"; —— 此写法已包含完整路径,安全 - 避免只用
"$host$request_uri",因部分重写规则可能改变$request_uri,建议优先用$uri(不含 query)+ 显式拼接$args
开发调试时临时禁用缓存
虚拟目录配置刚调通时,浏览器或服务器缓存常掩盖真实问题(例如改了 alias 路径但页面仍显示旧 404)。
- Chrome 浏览器:DevTools → Network → 勾选 “Disable cache”
- 强制刷新 PHP 文件:在 URL 后加时间戳参数,如
?v=1730550840 - 清除 OPcache:可通过
opcache_reset()函数(需在白名单 IP 访问)或重启 PHP 进程



















