Снижение перенаправления косой черты Symfony HTTPS

У меня есть конечная точка Symfony, которая выглядит так:

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

Когда я обслуживаю его на моем HTTPS-сервере (или ngrok), работает следующее:

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

Это выводит:

{«Привет, мир»}

Однако, когда я пытаюсь сделать следующее (обратите внимание на отсутствующую косую черту):

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

Я получаю сайт перенаправления и следующий заголовок ответа:

Место нахождения: http://subdomain.ngrok.io/controller/test/

Он добавляет косую черту, но, похоже, меняет протокол на HTTP. Это было бы легко решить путем замены @Route("/test/") с @Route("/test"), в этом случае совпадение будет работать как для отсутствующих, так и для существующих конечных слешей. Однако я бы предпочел убедиться, что всякий раз, когда Symfony решает, что перенаправление необходимо, он поддерживает протокол.

Существуют учебные пособия о том, как применять HTTPS везде, но это не то, что меня интересует. Мне нужно, чтобы Symfony никогда не менять протокол, когда он создает перенаправления. Как я могу это сделать?

РЕДАКТИРОВАТЬ: Что еще хуже, это 301 перенаправления. Это означает, что если к нему когда-либо обращаются из браузера, ущерб будет довольно постоянным.

РЕДАКТИРОВАТЬ 2: при удалении косой черты из @Route параметр, он перестает перенаправлять на URL-адреса, которые содержат косую черту, поэтому .../test буду работать. Тем не менее, даже если .../test/ не будет перенаправлять на .../testтеперь он выдаст 404. Поэтому Symfony автоматически добавляет косые черты в URL для перенаправления, но не вычитает их.

1

Решение

Я считаю, что ваша проблема связана с trustedProxies значение на Request объект. Symfony не слушает заголовки перенаправления HTTP-прокси (особенно X-Forwarded-Proto) если прокси не указан в доверенных прокси.

Добавив это в свой Symfony index.php или же app.php, должен решить вопрос для нгрок.

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

Увидеть http://symfony.com/doc/current/deployment/proxies.html для получения дополнительной информации о вариантах.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]