You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress主站与子目录CodeIgniter URL重写问题求助

搞定WordPress根目录下CodeIgniter的URL重写问题

我来帮你解决这个URL重写的坑!你要把http://example.com/developer直接映射到子目录drinking-water-database里的对应路径,之前的规则没生效主要是匹配范围不全、规则顺序不对,还有不必要的外部重定向,我给你调整一下配置:

调整后的完整.htaccess配置(替换原WordPress区块内容)

# BEGIN WordPress
# `BEGIN WordPress`和`END WordPress`之间的指令是动态生成的,仅应通过WordPress过滤器修改。
# 对此标记间指令的任何修改都会被覆盖。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# 优先处理CodeIgniter的developer路径映射
# 同时匹配/developer、/developer/、/developer/xxx等所有场景
RewriteRule ^developer(/.*)?$ drinking-water-database/index.php?/developer$1 [L]

# 保留WordPress原有的核心重写规则
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

为啥之前的规则不行?我给你拆解下关键修改点:

  • 规则顺序很重要:把CodeIgniter的规则放在WordPress规则前面,不然WordPress的兜底规则会先把请求抢走,直接跳去index.php导致404。
  • 匹配范围要全:之前的^developer/(.*)/$只能匹配带结尾斜杠的路径,比如/developer/test/,但你访问的/developer(不带斜杠)根本匹配不到,新规则^developer(/.*)?$能覆盖所有可能的访问形式。
  • 别用外部重定向:之前的R=301会让浏览器跳转到子目录的URL,用户能看到地址栏变化,我们要的是内部重写(地址栏保持/developer),所以去掉R=301,只留[L]表示这条规则处理完就停止。

额外要检查的几个点:

  • 确认服务器开了mod_rewrite模块,没开的话重写规则根本不会生效。
  • 去CodeIgniter的config.php里把$config['index_page']设为空字符串'',这样能让框架正常处理无index.php的URL。
  • 测试前清一下浏览器缓存,之前的301缓存可能会干扰测试结果。

要是你想单独测试规则,也可以把下面这段放在根目录.htaccess的最顶部(WordPress区块外面):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^developer(/.*)?$ drinking-water-database/index.php?/developer$1 [L]
</IfModule>

不过更推荐整合到WordPress的区块里,避免规则冲突。

内容的提问来源于stack exchange,提问作者Airful

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:47:48