lighttpd部署本地化Angular应用如何将URL重写至对应语言index.html
首先确保你已经在lighttpd配置中加载了rewrite模块:
server.modules += ( "mod_rewrite" )
使用以下重写规则即可满足需求:
url.rewrite-if-not-file = ( # 按需在括号内补充你支持的语言代码,用|分隔 "^/(cn|en|it|de)(/.*)?$" => "/$1/index.html" )
规则说明
- 仅当请求路径对应的真实文件不存在时才会触发重写,Angular生成的带哈希的chunk资源、图片、样式表等真实存在的静态文件会直接返回,不会被重写
- 自动识别路径中的语言代码,重写到对应语言目录下的
index.html,交给Angular路由处理前端路径 - 不会误判带点的前端路由(如
/user/my.nick),只要没有对应真实文件就会正常走路由逻辑
可选配置:根路径自动跳转默认语言
如果需要用户访问站点根目录时自动跳转到默认语言版本(比如默认中文),可以新增以下规则:
url.rewrite-once = ( "^/$" => "/cn/" )
配置生效
修改完成后执行以下命令检查配置语法是否正确,确认无误后重启lighttpd服务即可生效:
lighttpd -t -f /etc/lighttpd/lighttpd.conf
之前方案失效原因
- 全局404处理方案只能指向单一
index.html,无法适配多语言目录结构 - 基于后缀匹配的重写规则逻辑存在先天缺陷,无法区分带点的前端路由和真实静态文件
- 你之前使用的
url.rewrite-if-not-file规则正则匹配范围不全,仅匹配了带尾斜杠的路径,修正正则覆盖所有语言前缀路径后即可正常工作
内容的提问来源于stack exchange,提问作者Politechniczny
相关产品推荐
相关产品推荐

