2011-11-07 133 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