【问题标题】:php post request is empty when posting to url with nginx and switch router使用 nginx 和切换路由器发布到 url 时,php 发布请求为空
【发布时间】:2022-02-13 23:17:14
【问题描述】:

于是nginx将站点的所有请求发送到index.php

location / {
            try_files $uri $uri/ /index.php;
}

因此,当我将我的发布请求作为发布请求发送到/login-post 并尝试获取发布数据时。数组总是空的,我不明白我错过了什么,因为我向正确的 URL 发帖?但是post数据不存在?

表格:

<form class="form-signin text-center" action="/login-post" enctype="multipart/form-data" method="post" style="max-width: 400px">
    <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
    <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
    <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>

    <div style="width: 100%; display: flex; align-content: end; flex-direction: row-reverse;">
    <button class="btn btn-lg btn-primary btn-block" style="width: 100px" type="submit">Sign in</button>
    </div>
    <p class="mt-5 mb-3 text-muted">&copy; 2017-2018</p>
</form>

应该记录来自 (index.php) 的帖子数据的 php 代码

$request = $_SERVER['REQUEST_URI'];
echo $request;

switch ($request) {
    case '/' :
        (new HomeController)->index(); // this works
        break;
    case '/login' :
        (new LoginController())->index(); // this works
        break;
    case '/login-post':
        print_r($_POST); <---- this is always empty
        break;
    default:
        http_response_code(404);
        echo "404";
        break;
}

我不知道出了什么问题?或者为什么我看不到帖子数据。

【问题讨论】:

  • 您是否尝试过检查浏览器的网络控制台?是否包含要发布的数据?
  • 另外,为什么你需要multipart/form-data 来获得一个带有两个文本字段的简单表单?
  • 发布请求为 200,网络选项卡中的表单数据主体为空,对于第二个问题,我在 mb 上为此自动完成,但在这种情况下,这对发布请求没有影响它自己
  • 好吧,如果正文为空,则不会发送任何内容,也无法从该空内容中读取任何内容。如果这没有影响,请删除 multipart/form-data 以检查这是否解决了问题
  • 我删除了multipart/form-data,帖子数据仍然是空的

标签: php nginx


【解决方案1】:

您的 POST 为空,因为您的 &lt;input&gt;s 没有 name='' 属性

【讨论】:

    【解决方案2】:

    我有同样的问题,我可以执行一个很好的解决方案,问题与 htaccess 配置有关,所以让我们尝试在其中添加它

    RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|OPTIONS|POST|PROPFIND|PUT) [NC]
    RewriteRule .* - [F,L]
    

    它将允许您保留通过表单发送的信息

    如果它不起作用,请尝试将整个 htaccess 更改为类似的内容

    RewriteBase /
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.*) $1.html
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|OPTIONS|POST|PROPFIND|PUT) [NC]
    RewriteRule .* - [F,L]
    RewriteRule ^(.+)$ index.php [QSA,L]
    
    ErrorDocument 404 /404.php
    

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 2015-12-30
      • 1970-01-01
      • 2018-06-03
      • 2011-06-09
      • 2014-06-16
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多