现有mod_rewrite规则下.htaccess实现IP跳转域名解决多语言前缀冲突
正确合并重写规则方案
第一步:合并后的完整.htaccess配置
<IfModule mod_rewrite.c> RewriteEngine On # IP跳转规则放在最前面 RewriteCond %{HTTP_HOST} ^50\.50\.60\.60$ RewriteRule (.*) https://www.example.com/$1 [R=301,L] # 原有路由转发规则放在后面 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule>
规则逻辑说明
- 重写规则按从上到下的顺序匹配,
[L]标记会让匹配成功的规则执行后终止当前轮次的重写,所以外部跳转类规则必须放在内部路由转发规则之前,否则请求会先被转发到index.php,跳转规则永远不会触发 - 同一
mod_rewrite区块内不需要重复声明RewriteEngine On
可选:避免IP跳转后自动追加语言前缀
如果你不希望IP跳转后被自动加上/en/路径,在MY_Lang.php的__construct方法最开头添加如下判断即可:
function __construct() { // 访问IP时直接跳过语言自动跳转逻辑,优先执行htaccess的重定向规则 if ($_SERVER['HTTP_HOST'] === '50.50.60.60') { parent::__construct(); return; } // 原有代码保持不变 global $CFG; global $URI; // ... 剩余原有代码不做修改 }
测试注意事项
301重定向会被浏览器持久化缓存,测试时请使用浏览器无痕模式,或清理浏览器缓存后再验证效果。
内容的提问来源于stack exchange,提问作者Jada Developer
相关产品推荐
相关产品推荐

