从原生PHP迁移到Laravel时jQuery Ajax请求出现404错误
原生PHP迁移Laravel时Ajax请求404问题
正在从原生PHP迁移到Laravel,使用jQuery Ajax发起请求时遇到404错误,相关信息如下:
Ajax请求代码
console.log("Join Save TOken Func"); jQuery.ajax({ type: "POST", url: "/app/controllers/router.php", data: { controller: 'api_token', action: action, token: Token, token_name: Token_name, expire_date: Expire_date, permissions: Permissions }, cache: false, success: function(r) { ...
控制台错误信息
POST http://127.0.0.1:8000/app/controllers/router.php 404 (Not Found)
文件目录信息
- JS文件存放路径:
public\assets\js - router.php文件存放路径:
app\controllers\router.php
此前访问非/public路径时曾出现问题,不确定是否与此相关。
问题原因及解决方法
核心原因:Laravel的架构不允许直接访问
app目录下的文件,所有HTTP请求必须通过public/index.php入口,且需通过路由映射到控制器方法,直接请求app/controllers/router.php会被服务器拦截,返回404。具体修复步骤:
- 废弃原生的
router.php,按照Laravel规范创建控制器(例如ApiTokenController),并在其中编写处理令牌保存的方法(例如saveToken)。 - 在
routes/web.php或routes/api.php中定义路由:// 示例:web路由 Route::post('/api-token/save', [\App\Http\Controllers\ApiTokenController::class, 'saveToken']); - 修改Ajax请求的
url为定义好的路由地址:url: "/api-token/save", - 处理CSRF验证:Laravel默认会验证POST请求的CSRF令牌,需在页面头部添加:
并在Ajax请求中添加请求头:<meta name="csrf-token" content="{{ csrf_token() }}">headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
- 废弃原生的
补充说明:Laravel仅对外暴露
public目录,所有前端资源、请求入口都需通过该目录,这也是你之前访问非/public路径出问题的根本原因。
内容的提问来源于stack exchange,提问作者santiago morales
相关产品推荐
相关产品推荐

