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'] = ''
排查与解决步骤
修正.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]确认服务器环境
- 确保Apache的
mod_rewrite模块已启用,可通过phpinfo()查看或联系服务器管理员确认。 - 线上服务器若为Linux系统,文件名区分大小写,需确保控制器文件名(如
Product.php)和类名(class Product extends CI_Controller)首字母大写——本地Windows不区分大小写,但Linux会因小写文件名触发404。
- 确保Apache的
配置正确的base_url
在config.php中设置完整的线上域名,示例:$config['base_url'] = 'https://your-domain.com/';避免留空,确保Ajax请求的URL生成正确。
调试请求路径
使用浏览器开发者工具的「网络」标签,查看Ajax请求的实际URL,确认:- 请求路径是否与控制器路由匹配
- 是否存在301跳转导致的路径异常
- 请求的HTTP状态码及响应内容
检查路由配置
确认routes.php中没有冲突的路由规则,确保admin/product/get_category_ajax可正常访问。
内容的提问来源于stack exchange,提问作者Aadhar
相关产品推荐
相关产品推荐

