CodeIgniter下.htaccess动态URL跨域名重定向失效求助
解决方法
确保你的.htaccess文件放在CodeIgniter根目录(与index.php同级),按以下顺序配置规则即可解决冲突问题:
1. 先配置域名路径重定向规则
把针对app.domain1.com下g1/、g2/路径的重定向放在最前面,优先处理:
# 开启RewriteEngine RewriteEngine On # 匹配app.domain1.com下g1/开头的所有动态路径,重定向到app.domain2.com对应路径 RewriteCond %{HTTP_HOST} ^app\.domain1\.com$ [NC] RewriteRule ^g1/(.*)$ https://app.domain2.com/g1/$1 [R=301,L] # 匹配app.domain1.com下g2/开头的所有动态路径,重定向到app.domain2.com对应路径 RewriteCond %{HTTP_HOST} ^app\.domain1\.com$ [NC] RewriteRule ^g2/(.*)$ https://app.domain2.com/g2/$1 [R=301,L]
[NC]:忽略域名大小写匹配(.*):捕获g1/或g2/之后的所有动态路径片段[R=301]:永久重定向,适合正式环境;临时测试可改为R=302[L]:匹配后终止后续规则处理,避免与CodeIgniter的规则冲突
2. 保留CodeIgniter移除index.php的规则
在重定向规则之后,添加框架核心的URL重写规则:
# 若请求的是真实存在的文件或目录,直接访问不处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将非文件/目录的请求转发到index.php RewriteRule ^(.*)$ index.php/$1 [L]
如果服务器环境不支持上述写法,可尝试替换为:
RewriteRule ^(.*)$ index.php?/$1 [L]
3. 关键检查项
- 确认服务器已开启
mod_rewrite模块,且Apache站点配置中设置了AllowOverride All,允许.htaccess生效 - 测试前清空浏览器缓存,301重定向会被浏览器缓存,可能导致测试结果不准
- 本地测试需在
hosts文件中配置app.domain1.com和app.domain2.com指向本地服务器
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

