要实现通过 http://10.210.10.180:8020/xxx.html
访问指定路径下的对应文件,可以通过以下两种方式配置正则匹配:
方案一:通用 HTML 文件匹配
server {
listen 8020;
server_name 10.210.10.180;
# 所有 .html 文件的正则匹配
location ~ ^/(.+)\.html$ {
root /home/app/scm-modeling-service/page;
try_files /$1.html =404;
}
# 其他请求的默认处理
location / {
root /home/app/scm-modeling-service/page;
try_files $uri $uri/ /index.html;
}
}
说明:
location ~ ^/(.+)\.html$
会捕获所有以.html
结尾的请求(如xxx.html
)$1
表示正则捕获的第一个分组(即xxx
)try_files
会尝试查找/home/app/scm-modeling-service/page/xxx.html
方案二:带子目录的精确映射
如果 HTML 文件存放在子目录中(如 page/subdir/xxx.html
),可以进一步细化:
server {
listen 8020;
server_name 10.210.10.180;
# 匹配形如 /path/xxx.html 的请求
location ~ ^/(?<subpath>.+)/(?<filename>.+)\.html$ {
root /home/app/scm-modeling-service/page;
try_files /$subpath/$filename.html =404;
}
# 匹配根目录下的 xxx.html
location ~ ^/(?<filename>.+)\.html$ {
root /home/app/scm-modeling-service/page;
try_files /$filename.html =404;
}
# 默认处理
location / {
root /home/app/scm-modeling-service/page;
try_files $uri $uri/ /index.html;
}
}
说明:
- 使用命名捕获组
(?<subpath>.+)
和(?<filename>.+)
提升可读性 - 支持多级目录(如
/api/docs.html
→ 映射到/api/docs.html
)
关键配置解析
配置项 | 作用 |
---|---|
location ~ | 正则匹配(区分大小写),~* 表示不区分大小写 |
^/(.+)\.html$ | 正则表达式:匹配以 .html 结尾的路径,并捕获文件名部分 |
try_files | 按顺序尝试查找文件,若未找到返回 404 |
$1 | 引用正则表达式第一个捕获组的内容 |
测试验证
- 检查配置语法:
sudo nginx -t
- 重载 Nginx:
sudo systemctl reload nginx
- 访问测试:
curl http://10.210.10.180:8020/test.html # 应返回 /home/app/scm-modeling-service/page/test.html 的内容
补充说明
• 如果文件路径有特殊结构(如需要添加固定前缀),可调整正则表达式:
location ~ ^/prefix-(.+)\.html$ {
try_files /custom_dir/$1.html =404;
}
• 需要确保文件系统权限正确:
chmod -R 755 /home/app/scm-modeling-service/page
通过这种方式,可以灵活地将动态路径映射到物理文件路径。