You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel搜索表单使用POST方法时出现404页面未找到错误

POST方法搜索表单出现404错误,GET方法正常的问题排查

问题描述

使用POST方法的搜索表单点击提交时返回404未找到错误,但改用GET方法时功能正常。已确认能连接到运行中的127.0.0.1:3000服务器并获取结果,尝试过多种网上方案仍未解决。

相关代码

表单代码

<form action="{{ route('search') }}" method="POST">
{{ csrf_field() }}
     <div class="form-group">
         <div class="">
            <textarea class="form-control" type="textarea" name="search" placeholder="Search..." required></textarea>
         </div>
         <div class="submit">
            <button class="btn btn-success pull-right" type="submit"><i class="glyphicon glyphicon-search" aria-hidden="true"></i> Search</button>
         </div>
     </div>
</form>

路由文件(web.php)

Route::post('/search','App\Http\Controllers\SearchController@search')->name('search');

控制器代码(SearchController.php)

public function search(Request $request)
{
    try {
        // 获取请求中的搜索值
        $search = $request->input('search');

        $host = "127.0.0.1";
        $port = 3000;
        $timeout=15;
        $sk = fsockopen($host, $port, $errnum, $errstr, $timeout);

        foreach(explode("\r\n", $search) as $line) {    
            $final = $line; 
        }

        fwrite($sk, $final);
        fclose($sk);

    } catch(Exception $e){
        return response($e->getMessage(), 500);
    }
    return view('search', compact('final')); 
}

已执行的操作及结果

  1. 执行php artisan route:list,确认路由已注册:
GET|HEAD   / ....................................... SearchController@index
  POST       search .................................. search › SearchController@search
  1. 执行php artisan optimize:clear,清空框架缓存:
INFO  Clearing cached bootstrap files.  

  events ................................. 1ms DONE
  views .................................. 2ms DONE
  cache .................................. 1ms DONE
  route .................................. 0ms DONE
  config ................................. 0ms DONE
  compiled ............................... 0ms DONE
  1. 执行php artisan optimize,重新缓存框架文件:
INFO  Caching the framework bootstrap files.  

  config ........................................ 6ms DONE
  routes ........................................ 6ms DONE

解决方案尝试

1. 修正路由路径格式

路由定义中/search的前导斜杠可能导致路径匹配问题,可调整路由为:

Route::post('search','App\Http\Controllers\SearchController@search')->name('search');

或直接在表单中使用绝对路径action="/search"测试提交是否正常。

2. 验证CSRF令牌有效性

虽然表单已加入{{ csrf_field() }},但可临时关闭CSRF验证(仅测试用,生产环境禁止)排查问题:在app/Http/Middleware/VerifyCsrfToken.php的$except数组中添加路由:

protected $except = [
    'search',
];

若提交正常,说明令牌生成或会话存在异常,需检查页面渲染后的_token隐藏字段是否正确。

3. 检查服务器重写规则

  • Apache:确保项目根目录的.htaccess配置正确,包含Laravel默认的重写规则:
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
  • Nginx:确保站点配置中包含正确的请求转发规则:
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

重写规则错误会导致POST请求无法正确路由到Laravel,引发404。

4. 确认请求路径正确性

打开浏览器开发者工具(F12)的「网络」标签,点击搜索按钮后查看POST请求的实际URL,确认路径与路由定义一致,无多余/缺失的斜杠或域名错误。

5. 检查控制器文件有效性

确认SearchController.php存在于app\Http\Controllers目录下,文件名与类名(首字母大写)一致,命名空间正确。

内容的提问来源于stack exchange,提问作者Jake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:20:54