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);
}
路線應通常不關心端口,因爲這是主機的一部分,而不是路徑。對於重定向,這可能是重定向實現的缺陷。但是它確實支持任何有效的URI(包括端口):https://github.com/symfony/HttpFoundation/blob/master/RedirectResponse.php – hakre
我發現了這個問題。我正在開發一個配置了端口從本地主機:8080到VBox端口80的VBox機器。Symfony路由顯然依賴於SERVER_PORT全局,而不是請求URI中指定的內容。 因此,解決方案是重新配置nginx以將8080設置爲SERVER_PORT,或者真正讓它在端口8080上運行。 – Seb
這確實可以解釋它。端口轉發就像代理服務器。 Symfony2也可以在服務器配置旁邊處理,你應該可以通過symfony配置來解決這個問題,但是我不知道它是如何工作的。尋找透明的代理/負載均衡器設置。如果你能編出一個答案,這將是非常好的。 – hakre