如何在NGINX中将URL重写为子域名(保留原域名)
在NGINX中实现特定URL到对应子域名的重定向
直接在NGINX的app.example.com对应的server配置块中添加规则即可,两种配置方案供你选择:
方案1:单独配置每个目标路径
适合需要重定向的路径数量不多的场景,规则清晰直观:
server { listen 80; listen [::]:80; server_name app.example.com; # 重定向calendar路径到对应子域名 location /calendar { return 301 $scheme://calendar.example.com$request_uri; } # 重定向meetings路径到对应子域名 location /meetings { return 301 $scheme://meetings.example.com$request_uri; } # 保留原域名其他请求的正常处理逻辑 location / { # 这里填写你原有的app.example.com业务配置,比如反向代理或静态文件路径 # proxy_pass http://your_backend_service; # root /path/to/your/static_files; } }
方案2:正则批量匹配路径
如果后续需要新增更多同规则的重定向,可以用正则批量处理,减少重复配置:
server { listen 80; listen [::]:80; server_name app.example.com; # 正则捕获路径前缀,仅针对指定的几个路径生效 location ~ ^/([a-z0-9-]+) { if ($1 !~ ^(calendar|meetings)$) { break; } return 301 $scheme://$1.example.com$request_uri; } # 原域名其他请求的正常处理逻辑 location / { # 原业务配置 } }
关键细节说明
$scheme会自动适配当前请求的HTTP/HTTPS协议,无需硬写协议名$request_uri会保留原请求中路径的后续部分,比如app.example.com/calendar/2024会重定向到calendar.example.com/2024- 如果使用HTTPS,记得在server块中补充对应的SSL配置(
listen 443 ssl、ssl_certificate等) - 修改配置后,先执行
nginx -t检查语法正确性,确认无误后执行systemctl reload nginx(或对应系统的重启命令)生效
内容的提问来源于stack exchange,提问作者Mensur
相关产品推荐
相关产品推荐

