CodeIgniter 4子项目如何移除URL中的public路径
解决CodeIgniter 4嵌套项目URL跳转问题
问题原因
访问localhost/projectA/projectB/home时,请求被projectA根目录的.htaccess捕获,直接转发到projectA的index.php,导致请求被projectA处理而非嵌套的projectB。
解决方案
1. 给projectB添加专属.htaccess
在projectA/projectB/目录下创建.htaccess文件,写入以下规则:
RewriteEngine On # 跳过实际存在的文件或目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将请求转发到projectB的public/index.php RewriteRule ^(.*)$ public/index.php/$1 [L,NC,QSA]
2. (可选)优化projectA的.htaccess规则
如果上述配置未生效,可在projectA根目录的.htaccess开头添加规则,跳过projectB路径的处理:
# 让projectB的请求直接由子目录规则处理 RewriteRule ^projectB/ - [L] # 原projectA的规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([\s\S]*)$ index.php/$1 [L,NC,QSA]
原理说明
Apache服务器会优先读取请求路径中子目录的.htaccess文件,配置projectB的专属规则后,访问localhost/projectA/projectB/home时,请求会被projectB的.htaccess转发到自身的public/index.php,从而由projectB的CodeIgniter实例处理。
注意事项
- 确保Apache配置中开启了
AllowOverride All,否则.htaccess规则不会生效。 - 检查projectB的
public目录及文件权限,确保Apache用户有读取权限。
内容的提问来源于stack exchange,提问作者muza zamu
相关产品推荐
相关产品推荐

