服务器根目录WordPress与子目录CodeIgniter访问重定向及500错误问题
解决方案
第一步:修正根目录WordPress的.htaccess规则
你遇到的/codeigniter被重定向到/en/codeigniter的问题,本质是WordPress的默认重写规则会接管所有请求——包括子目录CodeIgniter的路径,大概率是WP的多语言插件或站点语言前缀设置触发了这个定向。我们需要让WP主动忽略/codeigniter开头的请求。
打开根目录的.htaccess,找到WP默认的重写规则块,在指定位置添加排除条件:
RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] # 新增:让WP跳过CodeIgniter子目录的请求 RewriteCond %{REQUEST_URI} !^/codeigniter/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
添加这条RewriteCond %{REQUEST_URI} !^/codeigniter/后,WP就不会再处理/codeigniter开头的请求,直接交给子目录的CodeIgniter接管。
第二步:配置CodeIgniter子目录的.htaccess(可选)
如果你的CodeIgniter需要去掉URL中的index.php以优化路径,可以在/codeigniter目录下创建/修改.htaccess,添加以下规则:
RewriteEngine On RewriteBase /codeigniter/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
这个规则会把所有非文件/非目录的请求转发到CI的index.php,同时避免和WP的规则冲突。
为什么你之前的RewriteRule会触发500错误?
你写的RewriteRule ^(.*/)?codeigniter/(.*) /codeigniter/$1 [L]存在无限循环的致命问题:
- 当请求
/codeigniter/xxx时,正则会匹配到该路径,重写后的结果依然是/codeigniter/开头的路径,会再次被这条规则捕获,服务器反复处理直到超出循环限制,最终返回500错误。
这条规则完全没必要,正确思路是让WP直接忽略CI目录,而非强行重写路径。
最后验证
修改完两个.htaccess后,清空浏览器缓存,访问www.wordpress.com/codeigniter,应该就能正常进入CodeIgniter页面,不会再出现/en的定向了。
内容的提问来源于stack exchange,提问作者beetle
相关产品推荐
相关产品推荐

