当前位置:论坛首页 > Linux面板 > 讨论

【已完成】宝塔新手求助,二级域名泛解析.

发表在 Linux面板2023-4-28 19:22 [复制链接] 2 1568

项目是这样的:
spring项目.
前后端分离,
domain.com是前端,静态
api.domain.com是spring项目.(部署的时候没有选择前后端分离)

现在项目的url是:

https://domain.com/#/pages/merchant/details?id=xxxxxxxxxxxxxxxxx
请求的时候对应的是
https://api.domain.com/m/*

这个ID是用户的ID.想给用户自定义成二级域名变成

https://*.domain.com


if ($host ~* "^(?<subdomain>[0-9]+)\.domain\.com$") {
set $subdomain_id $subdomain;
return 301 https://api.domain.com/m/$subdomain_id;
}

然后请求:https://api.domain.com/m/*和https://*.domain.com的时候.都能正确的到达
https://domain.com/#/pages/merchant/details?id=xxxxxxxxxxxxxxxxx
初步目标实现了.但
是浏览器里,还是显示的https://domain.com/#/pages/merchant/details?id=xxxxxxxxxxxxxxxxx
而不是https://*.domain.com/xxxxxxxxxxxxxxxx的url.
现在有什么办法实现用户使用二级域名的url请求的时候url显示在浏览器里吗?就是:https://*.domain.com/xxxxxxxxxxxxxxxx的url.



使用道具 举报 只看该作者 回复
发表于 2023-4-28 22:34:38 | 显示全部楼层
您好,根据您反馈的这个问题,如果需要生成返回这类的连接:https://*.domain.com/xxxxxxxxxxxxxxxx的url.
在Nginx上可能不太好实现。您可以参考下面所提供的一个参数看下是否可满足,如不能满足,您看下是否可通过前端代码进行一个判断跳转。

可以使用nginx的rewrite规则尝试去实现这个转换过程。
首先需要在当前网站的配置文件中重新增加一个server字段参数,监听需要被转换的域名,例如:
  1. server {
  2.     listen 80;
  3.     server_name domain.com;
  4.     return 301 https://$server_name$request_uri;
  5. }
复制代码


然后需要在server段中添加rewrite规则,将https://domain.com/#/pages/merchant/details?id=xxxxxxxxxxxxxxxxx转换为https://*.domain.com/xxxxxxxxxxxxxxxx,例如:
  1. server {
  2.     listen 443 ssl;
  3.     server_name domain.com;
  4.     ssl_certificate /path/to/cert.pem;
  5.     ssl_certificate_key /path/to/cert.key;
  6.     # Rewrite rule
  7.     if ($request_uri ~* "^/#/pages/merchant/details\?id=([0-9a-zA-Z]+)$") {
  8.         set $id $1;
  9.         rewrite ^ https://$id.$server_name permanent;
  10.     }

  11. }
复制代码

这个规则的意思是,如果请求的URI满足正则表达式^/#/pages/merchant/details\?id=([0-9a-zA-Z]+)$,则将id参数的值保存到变量$id中,然后将请求重定向到https://$id.$server_name,即https://*.domain.com。
需要注意的是,这个规则只适用于id参数是由数字和字母组成的情况。如果id参数包含其他字符,需要修改正则表达式以适应不同的情况。

如上述提供的例子无法满足或者实现的话,就需要您找下其他方法了。
使用道具 举报 回复 支持 反对
发表于 2023-5-4 10:21:18 | 显示全部楼层
堡塔运维向樛木 发表于 2023-4-28 22:34
您好,根据您反馈的这个问题,如果需要生成返回这类的连接:https://*.domain.com/xxxxxxxxxxxxxxxx的url.
...

向工你好.五一快乐.
我仔细看了,一会儿就尝试吧.
然后我居然漏了个最需要的需求.
需求是这样的:https://api.domain.com/m/*/validation-key.txt 这个路径下的这个txt文件.需要用二级域名的形式显示出来.


显示成: https://*.domain.com/validation-key.txt
我用https://*.domain.com/validation-key.txt 去请求的时候,浏览器能请求到值,但是浏览器显示 https://api.domain.com/m/*/validation-key.txt
您给出解决方案的需求,本质上可以不解决.因为我们是移动端,用户不在意url显示成什么.但是 https://*.domain.com/validation-key.txt 请求的时候需要用二级域名的形式出现,因为平台会验证https://*.domain.com/validation-key.txt  这个路径.跳转后的https://api.domain.com/m/*/validation-key.txt  验证不通过.
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理
快速回复 返回顶部 返回列表