部署到Infinity Free的Laravel项目AJAX POST请求报404/405错误如何解决?
故障根因
这是Laravel子目录部署的典型路径适配问题:
- 本地环境部署在站点根目录,绝对路径
/add_to_cart会正确指向http://本地域名/add_to_cart,匹配路由规则 - 线上部署在站点根目录下的
new_shop子目录,绝对路径/add_to_cart会指向http://线上域名/add_to_cart,而非实际存在的http://线上域名/new_shop/add_to_cart,因此返回404。你删掉前置斜杠后首页路径正常,是因为首页本身在new_shop/路径下,相对路径拼接后刚好匹配目标地址,但详情页路径层级不同,相对路径拼接结果会出错。
解决方案
推荐以下两种兼容多部署环境的稳定方案,不需要针对不同页面单独调整路径:
- 全局JS变量注入站点根路径(最常用)
在全站通用的Blade布局文件头部注入Laravel自动生成的站点根路径:
<script> window.APP_ROOT = "{{ url('/') }}"; </script>
修改AJAX请求地址为拼接后的路径:
jQuery.ajax({ url: window.APP_ROOT + "/add_to_cart", method: "post", data: jQuery('#formAddToCart').serialize(), success: function(result){} })
- HTML base标签统一路径解析基准
在全站通用的Blade布局文件<head>标签内加入base标签:
<base href="{{ url('/') }}">
所有AJAX请求直接写路由名称即可,不需要加前置斜杠:
url: "add_to_cart"
额外校验项
可以同步确认线上站点public目录下的.htaccess文件是否正常上传,确保Laravel伪静态规则生效,避免路由重写异常导致的404问题。
内容的提问来源于stack exchange,提问作者Akhlaque Ahmed
相关产品推荐
相关产品推荐

