Laravel项目删除评论POST请求出现404(Not Found)错误求助
问题分析
点击删除评论按钮时出现tp://localhost/delete-comment 404 (Not Found)错误,核心是请求的路由无法被Laravel匹配到,以下是具体排查和解决步骤:
排查步骤与解决方案
1. 确认路由是否正确注册
首先运行Artisan命令查看已注册的路由列表:
php artisan route:list
检查输出中是否存在POST /delete-comment条目,且对应的控制器为App\Http\Controllers\Frontend\CommentController@destroy。
如果路由未出现在列表中,清除路由缓存:
php artisan route:clear
2. 修复前端AJAX的URL问题
错误提示中的URL缺失http前缀,大概率是相对路径拼接问题。不要硬写相对路径,改用Laravel的url()辅助函数生成完整URL:
方案1(Blade模板内直接使用)
修改AJAX的url参数:
$.ajax({ type:'POST', url: "{{ url('delete-comment') }}", // 用Laravel辅助函数生成正确URL data: { 'comment_id': comment_id }, success:function(res){ if(res.status == 200){ thisClicked.closest('.comment-container').remove(); alert(res.message); } else { alert(res.message); } }, error: function(xhr) { console.log(xhr.responseText); // 打印错误详情,方便排查 } });
注:这段代码必须放在Blade模板文件中,才能让Laravel解析
{{ }}语法。
方案2(外部JS文件)
如果JS代码在外部文件中,先在页面的Blade模板里定义全局base URL:
<script> const baseUrl = "{{ url('/') }}"; </script>
然后在外部JS中使用:
url: baseUrl + '/delete-comment',
另外,你已经通过$.ajaxSetup全局设置了CSRF Token,所以AJAX的data里可以去掉重复的_token参数。
3. 验证控制器命名空间与路径
确认CommentController的命名空间是App\Http\Controllers\Frontend,与路由中引用的App\Http\Controllers\Frontend\CommentController::class完全匹配,避免因命名空间错误导致控制器无法找到。
4. 清除所有Laravel缓存
运行以下命令清除各类缓存,确保最新配置生效:
php artisan route:clear php artisan config:clear php artisan view:clear
5. 检查服务器配置
如果使用Nginx,确保配置文件中已将根目录指向项目的public文件夹,并且包含正确的重写规则:
server { listen 80; server_name localhost; root /path/to/your/project/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; // 根据你的PHP版本调整 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } }
如果是Apache,确保public/.htaccess文件存在且配置正确,Laravel默认的.htaccess已经包含了必要的重写规则。
内容的提问来源于stack exchange,提问作者Abdul Majid

