在WordPress目录内访问CodeIgniter控制器遇权限问题求助
CodeIgniter嵌入WordPress目录后权限/路由问题排查
一、问题核心
- CodeIgniter部署在WordPress目录下的
/v2/gym_management_system路径,登录页可正常访问,但提交登录请求(/v2/gym_management_system/index.php/User_authentication/user_login_process)返回Access Denied - 此前为WordPress 404错误,调整
.htaccess后转为权限/路由问题,所有CI控制器均无法访问
二、.htaccess配置修正
1. WordPress根目录.htaccess
当前WP的Rewrite规则会把所有非文件/目录的请求转发到WP入口/index.php,直接拦截了CI的控制器请求。得在WordPress的Rewrite规则前加一条排除规则,让CI目录的请求跳过WP处理:
修改后的WP .htaccess:
# BEGIN rlrssslReallySimpleSSL rsssl_version[5.2.1] <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] </IfModule> # END rlrssslReallySimpleSSL # BEGIN WordPress # The directives (lines) between "BEGIN WordPress" and "END WordPress" are # dynamically generated, and should only be modified via WordPress filters. # Any changes to the directives between these markers will be overwritten. <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 新增:排除CI目录请求,不转发到WP RewriteRule ^v2/gym_management_system/ - [L] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
这条RewriteRule ^v2/gym_management_system/ - [L]的作用是:匹配所有以v2/gym_management_system/开头的请求,直接终止后续Rewrite规则,让请求进入CI目录处理。
2. CodeIgniter目录.htaccess
你现在把CI的.htaccess放在application子目录是错的!必须移到CI的根目录(public_html/v2/gym_management_system/),否则Rewrite规则根本不生效。调整后的CI .htaccess内容:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /v2/gym_management_system/ # 排除静态资源和入口文件 RewriteCond $1 !^(index\.php|resources|assets|images|js|css|uploads|favicon.png|favicon.ico|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>
- 加
RewriteBase /v2/gym_management_system/:指定Rewrite基准路径,确保CI能正确解析路由 - 去掉
?:CI的URL重写不需要?,直接用index.php/$1即可
三、CodeIgniter配置调整
- 修改
application/config/config.php的基础URL:
$config['base_url'] = 'https://www.mydomain.com/v2/gym_management_system/';
确保base_url指向CI的根路径,避免路由生成错误。
- 检查
index_page设置:
$config['index_page'] = '';
保持为空,配合.htaccess实现URL隐藏index.php。
- 控制器权限检查
确认User_authentication控制器的user_login_process方法没有过度的权限拦截(比如强制要求已登录才能访问),登录请求本身应该允许匿名访问,有相关逻辑的话得调整。
四、文件权限检查
- CI目录下的
application/、system/、uploads/等目录权限设为755 - 文件权限设为644,避免服务器因权限问题拒绝访问
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

