流明 (5.8.7) - 路由中的最终参数包括尾部斜线
Lumen (5.8.7) - final parameter in route includes trailing slash
我正在使用 lumen 5 作为一个简单的 api 将数据传送到另一个 Web 应用程序。请求中的最后一个参数是加密的。这几个月来一直运行良好,但今天我们在最终的加密参数以斜杠结尾的地方遇到了麻烦:
https://xxx.yyy.zz/test/69UBiV8iBSDBQMumdaU/
尾部斜杠实际上是加密字符串的一部分...
在我的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 保留了尾部斜杠,但我仍然收到错误消息:
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)))
这告诉我收到的参数没有尾部斜杠,并且没有正确解密。
我的问题是:如何将尾部斜线保留为参数字符串的一部分,以便可以正确解密?
谢谢
/
是 URL 的一部分。所以你必须切换到 URL 安全的加密或编码方法。这意味着从 URL 中的加密中删除 +
、/
和 =
。我认为你可以为此使用 urlencode
和 urldecode
(也许与 base64_encode
和 base64_decode
.
结合使用
您也可以使用 $request->url();
并通过使用 preg_split("/\//", $string, -1, PREG_SPLIT_DELIM_CAPTURE);
在 /
上拆分来自行解析它。请注意,这仅在 /
位于末尾时才有效。我不知道你用的是什么加密。
我正在使用 lumen 5 作为一个简单的 api 将数据传送到另一个 Web 应用程序。请求中的最后一个参数是加密的。这几个月来一直运行良好,但今天我们在最终的加密参数以斜杠结尾的地方遇到了麻烦:
https://xxx.yyy.zz/test/69UBiV8iBSDBQMumdaU/
尾部斜杠实际上是加密字符串的一部分...
在我的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 保留了尾部斜杠,但我仍然收到错误消息:
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)))
这告诉我收到的参数没有尾部斜杠,并且没有正确解密。
我的问题是:如何将尾部斜线保留为参数字符串的一部分,以便可以正确解密?
谢谢
/
是 URL 的一部分。所以你必须切换到 URL 安全的加密或编码方法。这意味着从 URL 中的加密中删除 +
、/
和 =
。我认为你可以为此使用 urlencode
和 urldecode
(也许与 base64_encode
和 base64_decode
.
您也可以使用 $request->url();
并通过使用 preg_split("/\//", $string, -1, PREG_SPLIT_DELIM_CAPTURE);
在 /
上拆分来自行解析它。请注意,这仅在 /
位于末尾时才有效。我不知道你用的是什么加密。