nginx - Nginx 替换主机名中的字符
问题描述
我有这样的网址:
我希望 nginx 替换点“。” 主机名的子域部分中的字符由破折号“-”表示,因此这将导致:
我已经有一个服务器块,可以在“前缀”变量中捕获带有点的 url,但我找不到任何关于如何重写 url 的文档,以便在不使用 lua/...的情况下替换“前缀”中的字符:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name "~^(?<prefix>[\w\.]+).somedomain.com$";
rewrite 302 "$scheme://What do i put in here?.somedomain.com$request_uri";
}
非常感谢愿意为此提供帮助的人们!
解决方案
使用地图捕获子域:
map $host $resub {
~^([^.]+)\.([^.]+)\.somedomain\.com$ $1-$2;
~^([^.]+)\.([^.]+)\.([^.]+)\.somedomain\.com$ $1-$2-$3;
~^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.somedomain\.com$ $1-$2-$3-$4;
~^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.somedomain\.com$ $1-$2-$3-$4-$5;
# etc.
}
server {
server_name *.somedomain.com;
if ($resub) {
return 302 $scheme://$resub.somedomain.com$request_uri;
}
}
推荐阅读
- rest - 如何修改这个 M 查询以使 PowerBI 从一个 REST API 中同时获取所有页面?
- html - 在不操作显示属性的情况下隐藏 HTML 内容的正确方法
- javascript - 点击按钮后如何在 Playwright 中捕获请求和响应?
- pine-script - 策略中的交易时间
- react-native - 反应原生 iOS - 使用 lottie 文件的启动画面
- function - 检测到堆栈粉碎(未知)
- java - 如何使用 javax 验证来验证 java 普通方法
- angular - firebase 和 firestore 更新/身份验证期间的不可理解的行为
- spring - @RequestParam 从邮递员返回空值
- windows - SQLite 应用程序在新的 SQLiteConnection Windows 10 v 20H2 上提供 AccessViolation