You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter Ajax函数本地正常 线上服务器返回404错误求助

CodeIgniter线上部署后Ajax请求404问题排查与解决

本地环境运行正常,部署到线上服务器后,Ajax请求返回404错误,以下是相关代码及配置:

HTML代码

<form method="post" id="filter_form" action="<?=base_url('admin/product/product_stock')?>">
    <select data-placeholder="Please Select Root Category...." class="span12 required" name="root_category_id" id="root_category_id">
        <option value="">Please Select Root Category....</option>
        <option value="a">Root Category A</option>
        <option value="b">Root Category B</option>
        <option value="c">Root Category C</option>
    </select>
    <select data-placeholder="Please Select Category...." class="span12 required" name="category_id" id="category_id">
        <option value="">Please Select Category....</option>
    </select>
</form>

Ajax调用代码

$('#root_category_id').live('change', function(evt, params) {
    var opt = $(this).val();
    $.ajax({
        type:"POST",
        url:"<?=base_url()?>admin/product/get_category_ajax",
        data:"root_category_id="+opt,
        cache: false,
        success: function(data) {
            $("#category_id").html(data);
        }
    });
});

控制器函数

function get_category_ajax() {
    $root_category_id = $this->input->post("root_category_id");
    $data["get_categories_records"] = $this->product_model->getCategoryListbyAjax($root_category_id);
    $this->load->view("admin/RequiredCategoryByAjax",$data);
}

.htaccess配置

RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

已尝试的设置

修改config.php中的配置:

$config['index_page'] = ''

排查与解决步骤

  1. 修正.htaccess规则
    当前.htaccess中的RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]存在错误,%1未匹配到任何分组,会导致异常跳转。替换为正确的规则:

    RewriteEngine On
    RewriteBase /
    RewriteCond $1 !^(index.php|resources|robots.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
  2. 确认服务器环境

    • 确保Apache的mod_rewrite模块已启用,可通过phpinfo()查看或联系服务器管理员确认。
    • 线上服务器若为Linux系统,文件名区分大小写,需确保控制器文件名(如Product.php)和类名(class Product extends CI_Controller)首字母大写——本地Windows不区分大小写,但Linux会因小写文件名触发404。
  3. 配置正确的base_url
    在config.php中设置完整的线上域名,示例:

    $config['base_url'] = 'https://your-domain.com/';
    

    避免留空,确保Ajax请求的URL生成正确。

  4. 调试请求路径
    使用浏览器开发者工具的「网络」标签,查看Ajax请求的实际URL,确认:

    • 请求路径是否与控制器路由匹配
    • 是否存在301跳转导致的路径异常
    • 请求的HTTP状态码及响应内容
  5. 检查路由配置
    确认routes.php中没有冲突的路由规则,确保admin/product/get_category_ajax可正常访问。


内容的提问来源于stack exchange,提问作者Aadhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:46:35