AJAX加载PHP代码片段遇404错误(Kirby CMS),求解决方案
解决Kirby CMS中AJAX请求404的问题
你遇到的404问题大概率和Kirby的路由机制有关——默认情况下,Kirby会通过根目录的.htaccess把所有请求都导向index.php来处理,直接访问独立的ajax.php文件会被Kirby当成不存在的页面路由,从而返回404。下面给你两种可行的解决方案:
方案一:使用Kirby的路由系统处理AJAX请求(推荐)
Kirby推荐用内置的路由来处理这类动态请求,这样更符合CMS的架构,也避免了文件路径的问题:
- 在你的Kirby项目的
site/config/config.php文件中添加一个自定义路由:
return [ 'routes' => [ [ 'pattern' => 'ajax/timestamp', // 自定义的AJAX请求路径 'action' => function () { // 这里写你原来在ajax.php里的业务逻辑,比如输出时间戳 echo date('Y-m-d H:i:s'); exit; // 确保只返回你需要的内容 } ] ] ];
- 修改你的AJAX代码,把请求URL改成上面定义的路由路径:
$.ajax({ url: '/ajax/timestamp', // 匹配自定义路由 success: function(data) { console.log("success") $('#timestamp').html(data); }, error: function(){ console.log("error"); }, });
方案二:修改.htaccess排除ajax.php的路由拦截
如果你坚持要用独立的ajax.php文件,需要修改根目录的.htaccess,让服务器直接处理这个文件,而不是交给Kirby路由:
- 打开根目录的
.htaccess文件,找到Kirby默认的Rewrite规则部分,在最前面添加一行规则来排除ajax.php:
# 排除ajax.php,让服务器直接处理 RewriteRule ^ajax.php$ - [L] # 下面是Kirby原来的规则,保持不变 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
- 确保
ajax.php放在网站的根目录下,并且文件权限设置正确(通常是644),服务器能够读取该文件。
另外,你也可以先通过浏览器直接访问ajax.php的完整URL,确认是否真的能访问到——如果还是404,那大概率是文件位置不对,或者服务器的文件权限有问题。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

