Lumen (5.8.7) - последний параметр в маршруте включает завершающую косую черту - PullRequest
1 голос
/ 06 мая 2020

Я использую lumen 5 как простой API для доставки данных в другое веб-приложение. Последний параметр в запросе зашифрован. Это хорошо работает уже несколько месяцев, но сегодня у нас возникли проблемы, когда окончательный, зашифрованный параметрированный оканчивался на sla sh:

https://xxx.yyy.zz/test/69UBiV8iBSDBQMumdaU/

где конечный sla sh фактически является частью зашифрованной строки ...

In my routes / web. php:

...
router->get('/test/{code:.*}', 'SoapController@show');
...

В целях тестирования я также прокомментировал выведите эти строки в public / .htaccess:

# Redirect Trailing Slashes If Not A Folder...
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} /(.*)/$
#RewriteRule ^ /%1 [R=301,L]

Я могу подтвердить, что URL-адрес сохраняет завершающий sla sh, но я все равно получаю сообщение об ошибке:

at Application->Laravel\Lumen\Concerns\{closure}(8, 'Trying to get property of non-object', 
 '/var/www/html/test/app/Http/Controllers/SoapController.php', 133, array('testparam' => 
 '**69UBiV8iBSDBQMumdaU**', 'response' => object(stdClass), 'xml' => '<package><diffgram 
 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml- 
 diffgram-v1"/></package>', 'customer' => object(SimpleXMLElement)))

, которое сообщает мне, что параметр получен без завершающего sla sh и не расшифровывается должным образом.

Мой вопрос: как сохранить конечный sla sh как часть строки параметра, чтобы он можно правильно расшифровать?

Спасибо

1 Ответ

0 голосов
/ 06 мая 2020

/ является частью URL-адреса. Поэтому вы должны переключиться на безопасный метод шифрования или кодирования URL. Это означает удаление +, / и = из шифрования URL-адреса. Я думаю, вы можете использовать для этого urlencode и urldecode (возможно, в сочетании с base64_encode и base64_decode.

Вы также можете использовать $request->url(); и самостоятельно разбирать его, разбивая на / используя preg_split("/\//", $string, -1, PREG_SPLIT_DELIM_CAPTURE);. Обратите внимание, что это будет работать, только если / находится на конце. Я не знаю, какое шифрование вы используете.

...