Symfony 2.1.13静态资源404主因是Web根目录未正确指向web/目录,须确保服务器DocumentRoot设为web/、用assets:install部署Bundle资源、模板中始终使用asset()函数生成路径,禁用硬编码/web/。

Symfony 2.1.13 是一个较老的版本(发布于 2013 年底),其资源文件(CSS、JS、图片等)默认放在 web/ 目录下,通过 Web 服务器直接提供服务。但若加载慢、404 或路径混乱,问题往往出在目录结构、URL 映射或资产生成方式上,而非框架本身“动态处理”静态资源。
确保 web/ 是唯一 Web 根目录
Symfony 2.1.13 不支持现代的“public/”入口模式。必须将 Web 服务器(如 Apache 或 Nginx)的文档根(DocumentRoot)明确指向项目根目录下的 web/ 文件夹,例如:
- Apache:
DocumentRoot /var/www/myproject/web - Nginx:
root /var/www/myproject/web;
如果错误地把根设为项目根目录(/var/www/myproject),则访问 /css/style.css 实际会去找 /var/www/myproject/css/style.css —— 该路径不存在,必然 404。
使用 assets:install 命令部署第三方包资源
Bundle 中的资源(如 FOSUserBundle 的 CSS)默认放在 Resources/public/ 下,需手动复制到 web/ 才能被访问:
- 运行
php app/console assets:install web --symlink(加--symlink可避免重复拷贝,开发更便捷) - 该命令会把各 Bundle 的
Resources/public/内容链接或复制到web/bundles/fosuser/等路径 - 模板中用
{{ asset('bundles/fosuser/css/style.css') }}即可正确生成 URL
避免在模板里硬编码 web/ 路径
不要写 <link href="/web/css/app.css"> 或 <script src="web/js/main.js"> —— 这会导致路径错位或无法适配 CDN。始终使用 Twig 的 asset() 函数:
-
{{ asset('css/app.css') }}→ 输出/css/app.css(注意:前面不带web/) - 因为
web/是 Web 根,/css/app.css就对应web/css/app.css - 如需版本控制,可配置
assetic启用?v=xxx参数,但 2.1.13 默认不带此功能,需手动集成或用简单时间戳
检查 .htaccess(仅 Apache)是否启用重写
虽然静态资源不需要路由,但若 app_dev.php 或 app.php 能访问而 CSS 报 404,很可能是 Apache 未启用 mod_rewrite 或 .htaccess 被忽略:
- 确认
AllowOverride All在虚拟主机配置中已设置 - 检查
web/.htaccess是否存在且内容完整(标准 Symfony 2.1.x 版本自带) - 若仍不行,可临时改用
app.php/css/app.css测试——若能访问,说明是重写规则问题,不是路径问题


















