我正在将应用程序从https://mywebsite.com( 1 )迁移到https://otherwebsite.com( 2 )
该应用程序托管在其他服务器上

下面的代码在( 1 )上运行良好,生成的URL的方案为https
( 2 )上的相同代码使用http方案生成一个URL

$filterUrl = $this->router->generate('liip_imagine_filter', $params, UrlGeneratorInterface::ABSOLUTE_URL);

路线定义为
<route id="liip_imagine_filter" path="/media/cache/resolve/{filter}/{path}" methods="GET">
        <default key="_controller">%liip_imagine.controller.filter_action%</default>
        <requirement key="filter">[A-z0-9_\-]*</requirement>
        <requirement key="path">.+</requirement>
</route>

经典使用Symfony路由器,您是否有任何想法,为什么在( 1 )我得到https而在( 2 )我得到http

最佳答案

由于您没有将schemeshost属性传递给路由liip_imagine_filter,因此UrlGenerator使用当前请求的属性。

问题是PHP接收来自Web服务器的请求信息,有时它无法获得您所期望的信息。可能存在某种反向代理,例如Nginx,它接受来自Internet的HTTPS请求并通过HTTP将它们转发到另一个Nginx,最后symfony接收HTTP方案。

要确定反向代理后面的(2)服务器是否使用以下命令创建test.php文件:

<?php

echo $_SERVER['REQUEST_SCHEME'];

它将输出当前的请求方案。

要设置Symfony在反向代理下工作,请阅读官方文档中的此文章:https://symfony.com/doc/current/deployment/proxies.html

关于Symfony路由器重定向到https应用程序上的http,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48008731/

10-16 18:18
查看更多