You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony项目Twig加载CSS出现404错误,请求排查原因

解决Twig asset函数加载CSS出现404错误的问题

你的问题核心在于静态资源的目录结构和Nginx配置不匹配,具体原因和解决方案如下:

问题根源

你的Nginx配置中root指向的是项目的public目录:

root /var/www/html/backoffice/public;

这意味着Nginx只会从public目录下查找所有静态资源请求。但你的assets文件夹是放在项目根目录(/var/www/html/backoffice/),而不是public目录内。当浏览器请求assets/bootstrap/dist/css/bootstrap.min.css时,Nginx会去/var/www/html/backoffice/public/assets/...路径下查找文件,这个路径根本不存在,所以返回404错误。

推荐解决方案

方案1:遵循Symfony规范移动资源目录(最推荐)

Symfony的最佳实践是将所有静态资源放在public目录下,这样Nginx可以直接访问,asset()函数也能正确解析路径。你只需要把根目录下的assets文件夹移动到public目录中,不需要修改任何代码,刷新页面就能正常加载CSS了。

方案2:使用Symfony的assets命令创建软链接

如果不想移动文件夹,可以通过Symfony内置的命令将assets目录软链接到public目录,这样既保留原目录结构,又能让Nginx访问到资源:

php bin/console assets:install public --symlink

执行这个命令后,public目录下会生成一个指向根目录assets的软链接,此时asset('assets/bootstrap/dist/css/bootstrap.min.css')就能正确生成可访问的路径。

方案3:修改Nginx配置(不推荐)

如果你一定要保留assets在根目录,可以给Nginx添加一个专门处理/assets请求的location规则:

server {
    server_name yventee-backoffice.local;
    root /var/www/html/backoffice/public;

    # 新增这个location处理根目录的assets请求
    location ^~ /assets/ {
        root /var/www/html/backoffice;
        try_files $uri =404;
    }

    # 原有的location规则...
    location / {
        try_files $uri /index.php$is_args$args;
    }

    # ...其他配置
}

不过这种方法会打破Symfony的目录规范,可能带来安全隐患,所以仅作为临时解决方案,不推荐长期使用。

额外检查

确认你的asset()函数路径没有拼写错误,比如不要写成asset('/assets/...')(开头多了斜杠),保持asset('assets/...')的写法即可。

内容的提问来源于stack exchange,提问作者iamjc015

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:43:35