У меня есть конечная точка 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-адресам для перенаправления, но не вычитает их.