ОТПРАВКА формы в ‘/’ получает 301

В корне проекта (‘/’) у меня есть страница типа панели инструментов, которая направляется в ‘Patterns :: index’. Это прекрасно работает для загрузки страницы с помощью GET, но у меня также есть форма на этой странице, на которой я хочу отправить запрос POST для того же действия.

конфиг / routes.php

Router::connect('/', 'Patterns::index');

Линия создания формы в представлении выглядит так:

<?= $this->form->create($filter, ['url' => ['Patterns::index'], 'method' => 'post']) ?>

Заметкаэто тоже выглядело так, но тоже не сработало:

<?= $this->form->create($filter) ?>

Действие, сгенерированное этой формой, является правильным путем к проекту «../client-name» (корень) с методом POST. Но когда я нажимаю «Отправить», он пытается отправить запрос на этот маршрут и получает 301, а затем перенаправляет на «../client-name/» (обратите внимание на косую черту в конце).

Если я вручную отредактирую действие в браузере в HTML, чтобы получить косую черту в конце, запрос будет выполнен должным образом — он отправит запрос POST в Patterns :: index.

Еще кое-что, на что следует обратить внимание: если я удалю строку в config / route и просто получу доступ к ней, перейдя в «/ Patterns», все будет работать так, как задумано …

Может ли кто-нибудь указать мне правильное направление?

0

Решение

Вероятно, именно ваш веб-сервер, а не Lithium, вызывает перенаправление 301. У вас может быть физическая папка с именем client-name в корне сети. Ваш веб-сервер автоматически добавит косую черту тогда, когда он намеревается обслуживать индекс в этой папке. Другая возможность состоит в том, что ваш веб-сервер (apache? Или nginx?) Где-то имеет правило перезаписи, которое перенаправляет 301 на любой URL, который не имеет косой черты.

Литий использует PHP_SELF переменная среды для определения базовой папки в lithium\action\Request::_base() метод.

URL для действия формы генерируется через lithium\net\http\Router::match() метод. В коде есть строка, которая удаляет все завершающие слэши: https://github.com/UnionOfRAD/lithium/blob/7251cc28/net/http/Router.php#L434

Таким образом, Lithium определенно смещен в сторону URL, у которых нет косой черты. Это ограничение может служить основанием для регистрации проблемы в репозитории github проекта. Если вы редактируете Router.php файл в структуре и добавить это после строки, которая обрезает путь, он всегда будет включать косую черту для URL-путей без суффикса (то есть расширение файла):

if (!$suffix && $path !== '/') {
$path .= '/';
}

Я не уверен, есть ли другой способ. IIRC, когда я столкнулся с этой проблемой в проекте, я переместил физическую папку в другое место, чтобы мой веб-сервер не вызывал перенаправление 301.

0

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

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

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