Apache 有 mod_negotiation 扩展用于多语言处理。这里不详细探讨 Apache 的配置(下文有简述),只说 Nginx 的处理方式。
例如,存在某 .var 文件,内容如下:
URI: aboutus.html.ru Content-language: ru Content-type: text/html; charset=iso-8859-5 URI: aboutus.html.zh-CN Content-language: zh-CN Content-type: text/html; charset=utf-16
当客户端不同语言时,返回不同页面。
nginx 中也需要这么做。
以 FPC 多国语言站点为例子:
fpc.html 为默认页面,fpc.html.zh-CN 为中文页面,以此等等。
1、mime.types 增加
在 text/html 中 新增,bg en fi fr id it nl po sl ru zh-CN;
用于手动输入这些文件时,可以直接查看。
调整后示例:
text/html html htm shtml bg en fi fr id it nl po sl ru zh-CN;
2、在 vhost 站点文件中,server 同级添加:
用于设置 $lang 变量,标识访者语言。
# set fpc lang map $http_accept_language $lang { default en; ~*^en en; ~*^fi fi; ~*^fr fr; ~*^id id; ~*^it it; ~*^nl nl; ~*^pl po; ~*^sl sl; ~*^ru ru; ~*^zh zh-CN; }
3、server 内添加,用于访问 .var 文件时,指向到 .html 文件。
# fpc site .var file reads national language if ($uri ~ ^/(.*)\.var$) { set $new_url $1; rewrite /.* /$new_url.html.$lang break; }
rewrite 不能与 map 变量同时使用问题,此问题在官方已确认,设计上,确实如此。
参见 :map regex matching affects rewrite directive。
4、之后,重载 或 重启 nginx。
5、至此完毕。
访问 freepascal.cn 即可看到效果。
另外,说下 Apache 的配置,很简单:
1、启用扩展
Apache 配置文件 httpd.conf 中,找到 mod_negotiation.so 并取消注释,以开启扩展。
2、添加 MIME 类型
在 mime.types 文件中,添加一行:
application/x-type-map var
3、重启 Apache
这样,访客在访问 .var 页面时通过浏览器语言返回不同的页面。
相关链接:
Apache模块 mod_negotiation
nginx之重写
Nginx多语言支持(根据请求携带的语言做跳转)
nginx使用rewrite配置多语言页面
Nginx 一些常用的 URL 重写方法
映射正则表达式匹配会影响重写指令[英文]
nginx-lua-lang 通过第三方脚本实现[英文]
如何根据客户端浏览器的语言在nginx中重写位置?[英文]