2016-05-10 2 views
0

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

конфигурации/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».

Что-то еще отметить, что если я удалить строку в конфигурации/маршрутов и просто получить доступ к нему, перейдя на все «/ шаблоны» работает как задумано ...

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

ответ

0

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

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

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

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

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

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

Смежные вопросы