CodeIgniter表单无法提交反而下载文件问题求助
兄弟,这种表单提交后反而触发文件下载的诡异问题我之前踩过坑,大概率是路由或服务器配置出了问题,给你梳理几个排查和解决的方向:
1. 先确认表单提交的URL是否正确
你表单里用了<?php echo base_url().$path;?>LoginAccount,先别急着提交,打开浏览器开发者工具查看表单的action属性实际生成的URL是什么。如果URL存在错误(比如多了冗余路径、少了必要的控制器前缀),服务器会把这个请求当成静态文件处理,自然就会触发下载。
最稳妥的方式是先写死正确路径测试:
<form action="<?php echo base_url('myController/Function');?>" method="post" class="form-horizontal">
如果这样能正常提交,那就是$path变量的值有问题,回头检查这个变量的赋值逻辑即可。
2. 检查CodeIgniter的路由配置
打开application/config/routes.php,确认是否给控制器方法配置了正确的路由规则。CodeIgniter默认的URL规则是域名/控制器名/方法名,这里要注意两个细节:
- 控制器类名必须首字母大写(比如
MyController,对应的文件名也得是MyController.php) - 方法名尽量用小写或驼峰命名,避免使用关键字
如果想自定义LoginAccount这个路径指向myController/Function,需要在路由里添加一行规则:
$route['LoginAccount'] = 'myController/Function';
3. 服务器重写规则是否配置正确(关键!)
这种下载文件的问题,十有八九是index.php的重写没配置好,导致服务器识别不了CodeIgniter的URL规则。
如果你用Apache:
确保项目根目录下有.htaccess文件,内容配置如下:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
同时要确认Apache的mod_rewrite模块已经开启。
如果你用Nginx:
在站点的server配置块里添加这段重写规则:
location / { try_files $uri $uri/ /index.php?$query_string; }
4. 测试控制器方法是否可直接访问
在浏览器地址栏直接输入http://你的域名/myController/Function,如果访问不了(比如404或者触发下载),先解决这个问题再调试表单;如果能正常访问,再回头检查表单的提交方式和URL是否存在其他问题。
内容的提问来源于stack exchange,提问作者Sufyan

