支持但有限制:index指令允许在文件名中使用nginx内置变量(如$geo、$host),仅限构成文件名部分,不可用于路径前缀或影响location匹配;变量须在请求早期可解析且不含非法字符,推荐搭配无变量兜底文件使用。

支持,但有明确限制。
index 指令允许在文件名中使用变量
index 指令的参数可以包含 Nginx 内置变量(如 $geo、$host、$args 等),但仅限于构成文件名的部分,不能用于路径前缀或影响 location 匹配逻辑。
- 合法写法示例:
index index.$geo.html index.php;—— 若请求来自特定地区,Nginx 会尝试查找index.cn.html或index.us.html等文件 - 合法写法示例:
index home.$host.html;—— 根据 Host 头动态匹配首页文件 - 不合法写法:
index /var/www/$host/index.html;—— 变量不能出现在绝对路径开头,且 index 不解析路径变量,只作用于 root 下的相对路径查找
变量必须能被提前解析,且不依赖重定向后上下文
index 的内部重定向发生在请求处理早期,此时变量值已确定,但部分变量(如 $request_uri、$args)可能因重定向而变化,需注意实际生效时机。
- $host、$geo、$http_user_agent 等在初始请求阶段即可取值,适合用于 index
- $request_filename 或 $document_root 在 index 执行时还未完全确定,一般不建议在 index 中直接引用
- 变量若为空或含非法字符(如斜杠、空格),会导致匹配失败,最终回退到下一个候选文件或返回 404
实际配置建议
为保障稳定性,推荐将变量用在可预期、低风险的位置,并始终保留一个无变量的兜底文件。
- 写法推荐:
index index.$geo.html index.$host.html index.html; - 避免嵌套复杂逻辑,如
index page.$arg_theme.$arg_lang.html;—— 若任一参数缺失,整个文件名拼接失败,无法 fallback 到后续项 - 测试时可用
curl -H "Host: test.example.com" http://localhost/验证变量是否按预期生效











