Sonata Admin样式/脚本加载失败报403错误求助(Symfony3.3.11)
解决Sonata Admin Bundle静态资源403访问问题(Symfony 3.3.11 + Sonata Admin 3.24)
我之前帮同事处理过几乎一模一样的问题,你可以按下面的步骤逐一排查,应该能解决:
1. 先排查服务器Web服务(Apache/Nginx)的配置
权限设置对了但服务器没放行访问是最常见的原因:
- 如果用Apache:检查虚拟主机的
<Directory>配置块,确保web/bundles目录被允许访问,比如加上:
别让Apache把这个目录当成受保护的路径。<Directory "/path/to/your/project/web/bundles"> AllowOverride All Require all granted </Directory> - 如果用Nginx:确认静态资源的location规则正确,比如:
另外要确认Nginx的运行用户(比如location ~ ^/bundles/ { root /path/to/your/project/web; expires 30d; access_log off; try_files $uri =404; }www-data)对web/bundles目录有读取权限,即使你设了777,也可以执行sudo chown -R www-data:www-data web/bundles确保用户组匹配。
2. 重新生成静态资源
服务器上的资源可能没正确生成或者损坏了,执行以下命令重新部署:
# 清除旧资源并重新安装(支持符号链接就加--symlink,不支持就去掉) php bin/console assets:install web --symlink --relative # 生产环境下转储压缩后的资源 php bin/console assetic:dump --env=prod --no-debug
注意:生产环境一定要加--env=prod,避免加载开发环境的调试资源。
3. 检查服务器的安全策略(SELinux/AppArmor)
如果是Linux服务器,SELinux或AppArmor可能会拦截Web服务的访问请求,即使目录权限是777:
- 临时关闭SELinux测试:
如果关闭后能正常访问,就给目录添加永久访问规则:sudo setenforce 0sudo chcon -R -t httpd_sys_content_t /path/to/your/project/web/bundles
4. 确认服务器根目录指向正确
有时候部署时没把服务器的DocumentRoot指向项目的web目录,而是指向了项目根目录,这时候访问web/bundles会因为路径错误返回403。检查虚拟主机配置,确保根目录是/path/to/your/project/web。
内容的提问来源于stack exchange,提问作者Artem Yanin
相关产品推荐
相关产品推荐

