问题标题可能不合适--我甚至不知道到底出了什么问题:我有一个Laravel路由:Route::post("clients/sync/{command}/{uuid}", "SyncController@handle");这个路由在我的本地主机上执行得很好,并且和预期的一样。posted值只是一个名为data的字符串(大约10 is大小)。dump($request->input('data'));和dump($request->all());都在本地主机上提供了预期的输出。
但是,在实际部署时,即上传到远程托管时,似乎没有将输入与请求一起传递。dump($request->input('data'));简单地给出了[]。
我不知道该怎么办。我尝试过禁用VerifyCsrfToken中间件,尝试将内容类型的头更改为不同的类型,甚至完全禁用了所有中间件,等等.它只是做不到data的输入。
本地和主机服务器运行相同的PHP版本(7.2),并且都在Apache上运行。
请帮帮忙
UPDATE设置content-type:"application/x-www-form-urlencoded"给出了本地主机和远程服务器上的错误(即没有传递输入值)。设置content-type:"multipart/form-data;可以在本地主机上正常工作,但在远程服务器上提供MethodNotAllowedHttpException。现在,在远程服务器上设置Route::any("clients...会导致上述相同的空错误。
基于流行需求的更新2,请在下面找到@handle控制器处理程序(尽管我认为问题不可能来自这里):
public function handle(Request $r, $command, $uuid)
{
dd($r->all());//I also tried dd($$r->input('data'));
//but acutally, it does a bunch of stuffs
//it's just an API endpoint that fecthes a couple of data for the client based on the `data` input variable
//nothing that I think should cause Symphony's `MethodNotAllowedHttpException` here though
$c = \App\Client::where('uuid', $uuid)->firstOrFail();
...
return response('ok');
}邮递员,本地人:

邮递员,远程主机:相同的设置,相同的值,等等.

更新3当我减少了发布在data中的字符串内容的长度时,远程服务器Laravel安装就像预期的那样处理它!
用于远程服务器的更新4 phpinfo():

更新5我想我可能发现了一个bug。也许导致我失眠的错误是在我的网络主机上。详细信息:当data的内容不包含单词选择器时,一切都很好。但是,如果这样做,则不处理输入(即上面描述的“空”错误)。我只会继续把它称为“空错误”(在这里)它似乎是与输入处理有关的事情。似乎输入在某种程度上被过滤了,因为我现在已经确认它不是在输入的大小上,而是在输入的内容上。我用以下方法进行了测试:data = { "attendances": "{\"type\" : \"join\" , \"selectors\" :\"none\"}" }给出了空错误。当我用像selectors这样的随机词替换center时,一切都很好,即使是在非常大的数据集中。它看起来像正则表达式过滤,因为当我用单词select和selection替换时,会出现相同的空错误结果。
作为解决办法,我现在暂时在我的大型celection输入变量中对selecors的所有实例使用单词data。
顺便说一下,web主机是namecheap.com。
更新5更改了标题以适当地反映问题。
提醒__:localhost工作正常,只有远程抛出Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException__,但返回content-type:"application/x-www-form-urlencoded"的空输入
发布于 2018-07-15 10:44:10
在确认这是the主机(namecheap.com)服务器问题后,我聊起了他们的支持.因此,我知道他们有一个mod_security设置来标记请求参数。
有人能告诉我,是否有其他主机仅仅因为在这个上下文中有‘选择器’这个词就将http://you-domain.com/api/clients/sync/localData/40uanufU8htzGLga?data="{ "attendances": "{\"type\" : \"join\" , \"selectors\" :\"none\"}" }"标记为恶意的?更糟糕的是,没有任何单一的日志向域名所有者指出这样的情况?
请提出意见和反应。
(至少在我的另一个godaddy帐户上没有发生这种情况。@Polaris在下面的答复中还建议为Laravel托管数字海洋主机)
发布于 2018-07-15 07:23:07
对于远程服务器,请将web.php中的路由更改为:
Route::post("/api/clients/sync/{command}/{uuid}", "SyncController@handle");并在/app/Http/中间件/VerifyCsrfToken.php中确保有以下代码
protected $except = [
'/api/clients/sync/{command}/{uuid}'
];将邮递员中的“内容-类型”设置为:
application/json试一试,并报告任何成功或错误。
https://stackoverflow.com/questions/51345470
复制相似问题