linux中apache实现多语言分流需启用mod_rewrite、mod_proxy及mod_proxy_http模块,通过匹配accept-language请求头前缀(如zh-cn、en)并按优先级规则重写,支持反向代理或域名重定向两种方式。

Linux 中 Apache 实现多语言环境分流,核心是用 mod_rewrite 读取客户端 Accept-Language 请求头,结合正则匹配语言前缀(如 zh、en、ja),再通过反向代理或重定向分发到对应语言站点。它不是自动识别,而是靠规则驱动。
确认并启用必要模块
确保以下模块已加载,缺一不可:
-
mod_rewrite:用于解析请求头和条件判断 -
mod_proxy和mod_proxy_http:若走后端代理(推荐) -
mod_headers(可选):用于调试或透传语言信息
检查命令:httpd -M | grep -E "(rewrite|proxy|proxy_http)"。未启用时,在 /etc/httpd/conf.modules.d/ 或 httpd.conf 中取消对应 LoadModule 行的注释,然后重启服务。
基于 Accept-Language 做语言识别
浏览器发送的头类似:Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8。Apache 用 %{HTTP:Accept-Language} 获取原始值,不支持 %{HTTP_ACCEPT_LANGUAGE}(旧写法,已弃用)。
匹配逻辑建议按优先级从细到粗,避免误判:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先匹配
^zh-CN\b(精确中文简体) - 再匹配
^zh-TW\b(繁体) - 再匹配
^zh\b(泛中文) - 同理处理
^en\b、^ja\b等
注意:用 \b 或 (^|,)zh-CN(,|$) 可防止 zh-CN-xxx 类非法值干扰。
两种主流分流方式选其一
方式一:反向代理(内部转发,URL 不变)
- 适合前后端分离或微服务架构
- 每条
RewriteRule加[P]标志,并前置RewriteEngine On - 必须在所有规则后加兜底
ProxyPass / http://backend-default:8080/ - 启用
ProxyPreserveHost On,让后端看到原始 Host
方式二:域名重定向(跳转,URL 变)
- 适合多子域部署,如
zh.example.com、en.example.com - 加
RewriteCond %{HTTP_HOST} !^zh\.example\.com$ [NC]防循环跳转 - 用
[R=302,L]调试,上线前改为[R=301,L] - 建议排除爬虫 UA,避免搜索引擎误收录临时跳转
关键细节与避坑点
规则写在 <virtualhost></virtualhost> 内,且需包裹在 <directory></directory> 块中;RewriteEngine On 必须出现,且每台虚拟主机单独写。
-
RewriteCond只对紧随其后的那条RewriteRule生效 - 语言头可能为空或格式异常,务必配置默认兜底路径或后端
- 测试时用
curl -H "Accept-Language: zh-CN" http://localhost/模拟请求 - 开启
LogLevel alert rewrite:trace3查看重写过程(写入 error_log)










