使用CodeIgniter点击链接时生产环境出现404页面未找到错误
解决CodeIgniter生产环境链接404问题
看起来你在把CodeIgniter项目部署到生产服务器时,遇到了base_url和site_url生成的链接触发404的问题,结合你给出的信息,我帮你梳理几个关键的排查和修复步骤:
1. 先检查CodeIgniter核心配置
首先确认application/config/config.php里的关键配置是否正确:
- 设置正确的
base_url:生产环境必须填写完整的域名(带协议),比如:
不要留空或者用相对路径,否则$config['base_url'] = 'https://your-production-domain.com/';site_url生成的链接会出问题。 - 清空
index_page:因为我们用.htaccess去掉了URL里的index.php,所以要设置:$config['index_page'] = ''; - 调整
uri_protocol:部分服务器需要指定正确的URI协议,尝试改成:
如果还是不行,再试试$config['uri_protocol'] = 'REQUEST_URI';AUTO。
2. 修复.htaccess配置
你给出的.htaccess内容不完整,而且存在多余空格的问题(比如!^(index\.php| (.*)\.swf里的空格会导致规则匹配错误),建议替换成标准的CodeIgniter重写规则:
DirectoryIndex index.php RewriteEngine On # 排除不需要重写的文件/目录,注意不要有多余空格 RewriteCond $1 !^(index\.php|forums|images|css|downloads|jquery|js|robots\.txt|favicon\.ico|.*\.swf)$ # 确保请求的不是真实存在的文件或目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 重写请求到index.php处理 RewriteRule ^(.*)$ index.php/$1 [L]
关键修复点:
- 去掉规则里多余的空格,避免匹配错误;
- 增加
!-d条件,防止真实目录被错误重写; - 结尾加上
[L]标记,确保这条规则执行后停止后续重写。
3. 确认服务器环境配置
- 启用
mod_rewrite模块:如果是Apache服务器,必须确保mod_rewrite已经启用。可以通过在PHP页面输出phpinfo(),搜索mod_rewrite确认;如果是共享主机,可能需要联系服务商开启,或者在cPanel的“Apache模块”里勾选开启。 - 设置
AllowOverride All:确保服务器允许.htaccess生效,在Apache的虚拟主机配置里需要添加:
共享主机一般默认开启,但如果还是有问题,建议联系主机商确认。<Directory /path/to/your/project/root> AllowOverride All Require all granted </Directory>
4. 验证链接生成结果
最后,你可以在页面里临时输出echo site_url('View/page');,看看生成的URL是否是https://your-domain.com/View/page(不带index.php),如果生成的链接带index.php,那说明config.php的配置还是有问题,需要重新检查。
内容的提问来源于stack exchange,提问作者Muhammad Usman Khan
相关产品推荐
相关产品推荐

