Symfony 4.4修改public文件夹路径解决No input file specified报错
Symfony 4.4 自定义公共目录为app/web/frontend 可行解决方案
1. 修正composer.json配置
打开项目根目录的composer.json文件,修改extra节点下的公共目录参数:
{ "extra": { "public-dir": "app/web/frontend" } }
修改完成后执行命令使配置生效:composer dump-autoload
2. 迁移并修正前端控制器文件
- 将原
app/public目录下的所有文件(包括index.php、.htaccess、静态资源入口文件等)全部复制到app/web/frontend目录下 - 打开
app/web/frontend/index.php,修正路径引用适配新的目录层级,示例修正代码:
// 从app/web/frontend向上回溯3层定位到项目根目录,引入自动加载文件 require dirname(__DIR__, 3).'/vendor/autoload.php'; // 内核初始化代码保持原有逻辑即可,路径修正后内核可正常加载配置 $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
3. 同步修正web服务配置
框架侧配置完成后必须同步修改web服务器的站点根目录指向,否则服务会仍然从默认目录读取前端控制器:
- Nginx配置:找到对应站点的
server配置块,修改root参数:
server { root /你的项目绝对路径/app/web/frontend; # 其余rewrite、PHP解析配置保持Symfony官方推荐配置即可 }
- Apache配置:修改虚拟主机配置中的
DocumentRoot参数:
DocumentRoot "/你的项目绝对路径/app/web/frontend" <Directory "/你的项目绝对路径/app/web/frontend"> AllowOverride All Require all granted </Directory>
- 本地Symfony开发服务器:启动时指定公共目录参数:
symfony server:start --public-dir=app/web/frontend
4. 修正框架配置并清理缓存
- 打开
config/packages/framework.yaml,修正静态资源路径配置:
framework: assets: public_dir: '%kernel.project_dir%/app/web/frontend'
- 执行缓存清理命令,确保所有配置生效:
php bin/console cache:clear - 确认
app/web/frontend目录已赋予web服务器运行用户(如www-data、apache)可读权限
内容的提问来源于stack exchange,提问作者wookie
相关产品推荐
相关产品推荐

