Symfony Trailing Slash Redirection丢弃HTTPS

时间:2016-04-20 15:36:22

标签: php symfony redirect https trailing-slash

我有一个Symfony端点,如下所示:

Private Sub Block1_Enter()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim MyData As New DataObject
    Dim this As String
    Dim oldxt As String
    oldtxt = Block1.Text
    If InStr(Block1.Text, "&") > 0 Then
        this = Trim(Right(Block1.Text, (Len(Block1) - InStr(Block1.Text, "&") - 1))
        Block1.Text = "End Date Copied" & this
        MyData.SetText this
        MyData.PutInClipboard
        Application.Wait (Now + #12:00:02 AM#)
        Block1.Text = oldtxt
    End If
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

当我在支持HTTPS的服务器(或ngrok)上提供服务时,以下工作:

/**
 * @Route("/test/")
 */
public function testAction(){
    return new JsonResponse(['hello' => 'world']);
}

输出:

  

{"你好":"世界"}

但是,当我尝试以下操作时(注意缺少尾部斜杠):

curl https://subdomain.ngrok.io/controller/test/

我收到了一个重定向网站,以及以下响应标题:

  

地点:http://subdomain.ngrok.io/controller/test/

它添加了斜杠,但似乎将协议更改为HTTP。通过将curl https://subdomain.ngrok.io/controller/test 替换为@Route("/test/")可以很容易地解决这个问题,在这种情况下,匹配对于缺失和当前的尾部斜杠都有效。但是,我宁愿确保只要Symfony决定重定向是必要的,它就会维护协议。

有关于如何在任何地方强制执行HTTPS的教程,但这并不是我感兴趣的内容。我需要的是Symfony在创建协议时永远不会更改协议重定向。我该怎么做?

编辑:更糟糕的是那些是301重定向。这意味着如果它从浏览器访问过,那么损害是相当长久的。

编辑2:从@Route("/test")参数中删除尾部斜杠时,它会停止重定向到包含尾部斜杠的网址,因此@Route将起作用。但是,即使.../test没有重定向到.../test/,它现在也会抛出404.因此,Symfony会自动将斜杠附加到URL以进行重定向,但它不会减去它们。 / p>

1 个答案:

答案 0 :(得分:0)

我认为您的问题与trustedProxies对象上的Request值有关。除非代理在受信任的代理中列出,否则Symfony不会侦听HTTP代理转发标头(特别是X-Forwarded-Proto)。

将此添加到您的Symfony index.phpapp.php,可以解决ngrok的问题。

if ($debug) {
    Request::setTrustedProxies(
        [$_SERVER['REMOTE_ADDR']],
        Request::HEADER_X_FORWARDED_PROTO
    );
}

有关选项的更多信息,请参阅http://symfony.com/doc/current/deployment/proxies.html