Symfony 4.1 Twig表单重定向路径错误问题求助
解决Symfony 4.1表单重定向路径错误问题
这不是Symfony的Bug,而是你的应用请求上下文配置没跟上目录结构的变化导致的。因为你把项目部署在了/forum子目录下,但Symfony默认不知道这个base路径,所以absolute_url('/login')会直接生成根目录下的URL。下面是几个靠谱的解决方法:
方法1:在入口文件中设置请求上下文的Base URL
修改public_html/forum/index.php,在处理请求前明确告诉Symfony应用的base路径:
$kernel = new Kernel($env, $debug); $request = Request::createFromGlobals(); // 添加这行,设置应用的base URL为/forum $request->server->set('SCRIPT_NAME', '/forum/index.php'); // 或者直接设置路由上下文的base URL $kernel->getContainer()->get('router')->getContext()->setBaseUrl('/forum'); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);
这样Symfony就能正确识别应用所在的子目录,生成的绝对URL会自动带上/forum前缀。
方法2:使用路由名称生成路径(推荐)
不要硬写路径/login,而是用Symfony的路由名称来生成URL,这样会自动适配当前的base路径。假设你的登录路由名称是login,修改Twig模板中的代码:
{{ form_start(formLogin, {'action': path('login'), 'method': 'POST'} ) }}
path()函数会基于当前请求上下文自动生成正确的路径,不管你的应用部署在哪个子目录下都能正常工作,这也是Symfony推荐的最佳实践。
方法3:配置.env文件中的APP_URL
在项目的.env文件中设置应用的完整URL:
APP_URL=http://localhost/forum
不过要注意,这个配置主要用于命令行环境生成URL,Web请求下还是优先依赖请求上下文的设置,所以建议和方法1配合使用。
内容的提问来源于stack exchange,提问作者waha has
相关产品推荐
相关产品推荐

