2011-11-07 81 views
3

我试图在端口8080而不是端口80下运行基于Symfony2的web应用。现在我已经注意到所有绝对路由在URL中缺少端口限定。重定向也是如此,它也尝试重定向到80端口。 另外,在树枝模板中使用url('')时,不包含端口。Symfony2:路由忽略URL中的端口

我到现在为止尝试的是设置framework.router.http_port设置,它没有做任何事情。然后我尝试手动创建一个RequestContext,并在bundle启动时将它传递给路由器,但也无济于事。这是我试过的代码:

$router = $this->container->get('router'); 
if (!empty($_SERVER['HTTP_HOST'])) { 
    list($host, $port) = explode(':', $_SERVER['HTTP_HOST']); 

    $context = new RequestContext(
      '', 
      $_SERVER['REQUEST_METHOD'], 
      $host, 
      (empty($_SERVER['HTTPS'])?'http':'https'), 
      $port 
    ); 
    $router->setContext($context); 
} 
+0

路线应通常不关心端口,因为这是主机的一部分,而不是路径。对于重定向,这可能是重定向实现的缺陷。但是它确实支持任何有效的URI(包括端口):https://github.com/symfony/HttpFoundation/blob/master/RedirectResponse.php – hakre

+2

我发现了这个问题。我正在开发一个配置了端口从本地主机:8080到VBox端口80的VBox机器。Symfony路由显然依赖于SERVER_PORT全局,而不是请求URI中指定的内容。 因此,解决方案是重新配置nginx以将8080设置为SERVER_PORT,或者真正让它在端口8080上运行。 – Seb

+0

这确实可以解释它。端口转发就像代理服务器。 Symfony2也可以在服务器配置旁边处理,你应该可以通过symfony配置来解决这个问题,但是我不知道它是如何工作的。寻找透明的代理/负载均衡器设置。如果你能编出一个答案,这将是非常好的。 – hakre

回答

1

从OP:

我从 我的本地端口转发confiured一个垂直框机发展:8080到垂直框中,端口80。显然,Symfony路由 依赖于SERVER_PORT全局,而不是 请求URI中指定的内容。因此,解决方法是重新配置nginx的设置 8080为SERVER_PORT,还是要真正让它在端口运行8080