ThinkPHP 6.0 静态资源必须置于 public/ 目录,Web 服务器根目录须指向 public/;Nginx/Apache 需正确配置 root/DocumentRoot,开发时 php -S 要配合 router.php;推荐用 asset() 或自定义函数生成 URL,支持 .env 中 ASSET_PREFIX 配置 CDN;模板中可用 tpl_replace_string 设置 STATIC 替换;静态资源应由 Web 服务器直接处理并启用缓存。

ThinkPHP 6.0 静态资源必须放在 public/ 目录下,且 Web 服务器根目录(root)必须指向 public/,否则所有 CSS、JS、图片都会 404。
确保 public 是 Web 入口
这是最基础也最容易出错的一环:
- Nginx 的
root指令要设为项目路径下的public,例如:root /var/www/myapp/public; - Apache 要把虚拟主机的
DocumentRoot指向public,并确保.htaccess生效、AllowOverride All已开启 - 开发时用
php -S,必须配合router.php手动拦截静态请求,否则所有/static/xxx都会进index.php - 别把静态文件放错位置——比如丢到项目根目录或
app/下,asset()函数只认public/内的相对路径
统一生成静态资源 URL
避免硬写 /static/css/app.css,推荐两种安全方式:
- 用内置
asset()辅助函数:{{ asset('static/css/app.css') }}(模板中)或asset('static/js/main.js')(PHP 中),它自动拼接当前域名 + 路径 - 自定义
static_url()函数:在app/common.php中定义,读取配置项如config('app.static_prefix'),支持多环境前缀(如 CDN 域名) - 若需跨域或换 CDN,在
.env中设ASSET_PREFIX=https://cdn.example.com,再让asset()或自定义函数读取该值
模板中替换字符串(可选但实用)
如果沿用 TP3/5 的写法习惯,可在 config/template.php 中配置:
-
'tpl_replace_string' => ['__STATIC__' => '/static'],这样模板里写{:__STATIC__/css/app.css}就能正常解析 - 若后台使用独立域名(如
admin.example.com),此处应写完整地址:'__STATIC__' => 'https://admin.example.com/static' - 注意不要和
__ROOT__混用;__ROOT__是站点根路径,而静态资源路径是固定以/static/开头的子路径
Web 服务器优化建议
让 Nginx/Apache 直接服务静态文件,不经过 PHP:
- Nginx 示例(放在
location ~ \.php$之前):
location ^~ /static/ {
alias /var/www/myapp/public/static/;
expires 1y;
add_header Cache-Control "public, immutable";
} - Apache 的
.htaccess要加判断:RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d,并在跳转前排除/static/路径 - Linux 环境注意大小写:
/Static/≠/static/,路径写错直接 404
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











