Prestashop使用WebvoltyTemplate时搜索等ajax请求返回403错误排查求助
403错误排查思路
服务端配置排查
- 检查
modules/wtcmssearch/目录下的.htaccess文件,大部分CMS的模块目录默认会配置全局禁止PHP文件直接访问的规则,比如Require all denied(Apache 2.4)或deny from all(Apache 2.2)。如果存在该规则,添加针对ajax.php的访问豁免:
<Files "ajax.php"> Require all granted </Files>
- 检查Apache虚拟主机的全局安全配置,是否存在拦截
/modules/路径下PHP文件执行的规则,这类规则是常见的拦截原因。 - 你已经关闭了mod_security,可跳过WAF层面的拦截排查。
请求参数校验排查
- 你当前的AJAX参数拼接存在错误:JS代码中直接用
&拼接参数,会导致服务端无法正确识别category_id和token字段。如果服务端有参数完整性校验或token校验,就会直接返回403。建议改为对象格式传参避免拼接错误:
data: { search_words: search_words, category_id: cat_id, token: static_token }
- 打印确认
static_token的值是否有效,大部分CMS的AJAX接口都会校验请求token,token为空或错误会直接返回403。 - 检查请求头是否携带
X-Requested-With: XMLHttpRequest,很多接口会判断是否为异步请求,非异步请求直接返回403。
服务端代码逻辑排查
- 在
ajax.php文件最开头加入调试代码,确认请求是否能走到业务逻辑层:
<?php echo 'access test'; exit; // 原有代码保持不变
如果访问仍然返回403,说明问题出在服务器配置层面;如果能正常输出内容,说明是接口本身的权限校验逻辑返回的403,继续向下排查。
- 检查
ajax.php中是否有来源校验逻辑,比如校验HTTP_REFERER是否属于本站,域名更换或本地调试时会触发该校验返回403。 - 检查
ajax.php中是否有用户权限校验逻辑,比如要求登录后才能访问搜索接口,未登录状态请求会返回403。 - 检查CMS后台的模块配置,确认wtcmssearch模块的前端访问权限是否对游客/普通用户开放。
内容的提问来源于stack exchange,提问作者Jorhanc
相关产品推荐
相关产品推荐

