使用.htaccess实现URL中/official路径的移除与重定向
根目录.htaccess最终配置
全程只需要修改网站根目录下的.htaccess文件,CI项目自带的目录内.htaccess不需要做任何调整。
完整规则代码
把现有根目录.htaccess的内容替换成以下代码:
RewriteEngine On RewriteBase / # 优先处理带/official路径的301永久重定向 # 仅匹配浏览器直接发起的原始请求,从根源避免内部重写导致的规则循环 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /official(/.*)?\ HTTP/ [NC] RewriteRule ^official(.*)$ /$1 [R=301,L,NC] # 原有内部映射逻辑,实现不带/official路径访问CI项目 # 根路径默认指向CI项目目录 RewriteRule ^$ official/ [L] # 跳过根目录下真实存在的文件、目录,避免误伤其他站点(如WordPress的program目录) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f # 将非真实存在的请求路径,内部映射到official目录下的CI项目 RewriteRule ^((?!official/).+)$ official/$1 [L,NC]
实际生效效果
- 所有带
/official前缀的浏览器请求,会自动触发301永久重定向,跳转到去掉该前缀的对应地址:- 访问
www.example.com/official→ 自动跳转到www.example.com/ - 访问
www.example.com/official/member/center→ 自动跳转到www.example.com/member/center
- 访问
- 重定向完成后,用户访问无
/official的地址时,服务器后台会直接映射到official目录下的CI项目处理,用户全程看不到该目录路径 - 根目录下用于跑WordPress的program目录不受任何规则干扰,保持原有访问逻辑
关键注意事项
- 规则顺序不能调换:301重定向规则必须放在内部映射规则前面,否则请求会被内部重写拦截,无法触发客户端重定向
- 301重定向会被浏览器强缓存,测试时建议用无痕窗口,或手动清除浏览器旧缓存再验证,避免之前的旧规则导致测试结果不准
- 不要修改official目录下CI自带的.htaccess,该规则仅负责CI本身的入口路由,和对外URL重写逻辑完全独立,改动反而可能导致CI路由报错
内容的提问来源于stack exchange,提问作者cah-kangkung
相关产品推荐
相关产品推荐

