CodeIgniter中用.htaccess将指定URL重定向至根域名的问题
解决Apache URL重定向失效问题
我来帮你搞定这个重定向的问题~你之前的规则没生效主要有两个原因:
Redirect指令属于mod_alias,它不支持正则表达式,你加的$会被当作URL的一部分字面匹配,自然找不到对应的请求;- 那条规则只覆盖了
/welcome/index,没处理另外两个需要重定向的URL。
下面给你两种可行的解决方案,根据你的服务器配置选就行:
方案1:用RedirectMatch(简单直接,支持正则)
如果你的服务器开启了mod_alias(默认都开),直接在.htaccess或者Apache配置文件里加这条规则,一次性覆盖所有三个目标URL:
RedirectMatch 301 ^/(welcome(/index)?|index\.php)$ /
正则说明:
^/:匹配URL开头的根路径斜杠welcome(/index)?:同时匹配/welcome和/welcome/index(?表示括号里的内容可选)|:逻辑“或”,用来分隔不同的匹配规则index\.php:匹配/index.php(正则里.要转义,不然会匹配任意字符)$:匹配URL结尾,避免匹配到类似/welcome/indexabc这种无关路径
方案2:用mod_rewrite(更灵活,适合复杂场景)
如果你的服务器开启了mod_rewrite(大部分Apache环境都支持),可以用这套规则,扩展性更强:
RewriteEngine On # 匹配目标路径并永久重定向到根目录 RewriteRule ^(welcome(/index)?|index\.php)$ / [R=301,L]
参数说明:
R=301:标记为永久重定向,对SEO更友好;测试阶段可以改成R=302(临时重定向),避免浏览器缓存旧规则导致测试不准L:表示这是最后一条规则,匹配成功后不再执行后续重写规则
注意事项:
- 确保
.htaccess文件放在网站的根目录下 - 检查Apache配置里是否开启了
AllowOverride All,否则.htaccess的规则不会生效 - 测试前可以清空浏览器缓存,避免旧的重定向规则干扰
内容的提问来源于stack exchange,提问作者deep
相关产品推荐
相关产品推荐

