多域名下.htaccess无跳转多语言Rewrite规则配置问题
多域名自动匹配Locale的.htaccess重写解决方案
完整生效的重写规则
替换你现有的.htaccess内容为以下代码:
RewriteEngine on # 保留原有路径带locale的解析规则 RewriteRule ^(..)/?$ /?locale=$1 [QSA,L] RewriteRule ^(..)?\/?select\/?$ /?locale=$1&action=price_group [QSA,L] RewriteRule ^(..)?\/?pages/([a-zA-Z0-9_-]+)\/?$ /?locale=$1&action=$2 [QSA,L] # 新增多域名自动匹配Locale规则 # 排除静态资源,避免干扰css/js/img等文件 RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ [NC] # 跳过真实存在的文件和目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # domain1.com自动绑定locale=en RewriteCond %{HTTP_HOST} ^domain1\.com$ [NC] RewriteCond %{QUERY_STRING} !locale= [NC] RewriteRule ^(.*)$ /?locale=en&%{QUERY_STRING} [QSA,L] # domain2.com自动绑定locale=fi RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{HTTP_HOST} ^domain2\.com$ [NC] RewriteCond %{QUERY_STRING} !locale= [NC] RewriteRule ^(.*)$ /?locale=fi&%{QUERY_STRING} [QSA,L]
规则优化说明
你之前的规则仅首页生效,核心问题是缺少必要的标志和精准的过滤条件:
- 静态资源过滤:用明确的后缀列表排除静态文件,替代你之前模糊的
REQUEST_URI判断,避免误拦截路径请求 - 真实文件/目录跳过:添加
!-f和!-d条件,不对服务器上真实存在的文件或目录执行重写 - 参数传递与标志:使用
%{QUERY_STRING}保留原有请求参数,配合QSA标志确保参数拼接正确;L标志终止当前规则链,避免后续规则干扰 - 兼容性增强:
[NC]标志忽略大小写,适配不同域名大小写的请求场景
验证覆盖场景
domain1.com→domain1.com/?locale=endomain1.com/pages/test→domain1.com/?locale=en&action=testdomain2.com→domain2.com/?locale=fidomain2.com/pages/test→domain2.com/?locale=fi&action=test- 原有路径带locale的功能不受影响:
domain1.com/fi/pages/test→domain1.com/?locale=fi&action=test
内容的提问来源于stack exchange,提问作者Женя Лазарев
相关产品推荐
相关产品推荐

