Nginx如何区分根路由与其他所有子路由的配置规则?
Nginx路由配置解决方案
原配置失效的核心原因是Nginx的location匹配优先级规则:正则匹配类型的location优先级高于普通前缀匹配类型的location,你写的location ~* /.*属于正则匹配,可匹配所有路径(包括根路径/),所以所有请求都会被该规则拦截,普通前缀匹配location /永远不会触发。
正确配置示例
# 精准匹配根路由,仅处理站点根路径请求 location = / { root /var/location2/; try_files $uri /homepage.html =404; } # 匹配所有非根路径的请求,用于单页应用路由 location / { root /var/location1/; try_files $uri $uri/ /index.html =404; }
规则说明
location = /是精准匹配规则,优先级为所有location类型中最高,仅当请求的路径完全为/时才会命中,保证根路由指向/var/location2/homepage.html,请求携带的查询参数不影响该匹配规则。- 其余所有非根路径的请求都不会命中精准匹配,会自动匹配到下方的普通前缀匹配
location /,无需逐个定义子路由即可覆盖所有子路径,适配单页应用的前端路由需求。 - 如果你的配置中还有其他正则匹配规则,可将
location /修改为location ^~ /,进一步提升该规则的优先级,避免被其他正则规则拦截。
内容的提问来源于stack exchange,提问作者Venomoustoad
相关产品推荐
相关产品推荐

