如库里:
domain |
---|
*.baidu.com |
a.baidu.com |
select * from 'b.baidu.com' ~* domain;
报错 ERROR: invalid regular expression: quantifier operand invalid
select * from domains where domain ~* 't.baidu.com'
1
qwerthhusn 2022-01-21 17:23:04 +08:00
like '%.baidu.com'
|
2
alsotang 2022-01-21 17:39:18 +08:00
from 后面不是应该跟 table 名称吗
|
3
liuxu 2022-01-21 17:58:37 +08:00
这个帖子问的太过分了,我 google 都不想帮你贴了
|
5
dzdh OP |
6
jinliming2 2022-01-21 22:01:40 +08:00
@dzdh 没看懂,什么叫“根据什么把传过来的参数给去掉呢”
SELECT * FROM domains WHERE domain ~* '^[^\.]+\.baidu\.com$'; -- 这个可以只匹配二级域名,而不匹配三级、四级等 如果你是想指定匹配一级域名的话,那比较困难,因为一级域名的后缀是一个很长的列表,比如 .com 、.cn 这类只有一个尾缀的,还有 .com.cn 这类有两个尾缀的,还有 google 这样的公司名域名( https://domains.google ),还有 .中国 .中國 .香港 .個人.香港 这类一个尾缀或两个尾缀的中文域名…… 列表应该是 https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat 的 ===BEGIN ICANN DOMAINS=== 到 ===END ICANN DOMAINS=== 中间的部分 |
7
0ZXYDDu796nVCFxq 2022-01-21 22:39:23 +08:00 via Android
|
8
dzdh OP @jinliming2
其实就是库里存了一堆证书 certs: cn varchar (*.baidu.com, baidu.com, a.baidu.com), cert, priv 想实现 ,根据当前 host 取出对应的证书。比如 host 是 a.baidu.com ,就取 a.baidu.com 的证书,是 xx.baidu.com 就取出 *.baidu.com 的证书,host 是 baidu.com 就取出 baidu.com 的证书 |
9
jinliming2 2022-01-23 21:26:47 +08:00
@dzdh emmmm ,不知道我理解的对不对:
data:;base64,U0VMRUNUIENPQUxFU0NFKAogIChTRUxFQ1QgKiBGUk9NIGRvbWFpbnMgV0hFUkUgZG9tYWluID0gJ2FhLmJhaWR1LmNvbScpLAogIChTRUxFQ1QgKiBGUk9NIGRvbWFpbnMgV0hFUkUgZG9tYWluID0gUkVHRVhQX1JFUExBQ0UoJ2FhLmJhaWR1LmNvbScsICdeW14uXSsnLCAnKicpKQopOw== 用 COALESCE 分成两次查询,第一次绝对匹配,能匹配到直接返回,匹配不到的话,再进行第二次匹配。第二次先用正则把域名开头的子域名替换为 * 再进行绝对匹配。因为通配符证书只能匹配一级子域名,所以只需要 replace 一级。 P.S.: 额,直接发 SQL 被 CloudFlare 拦截了…… |
10
dzdh OP @jinliming2 最终决定改动入参用 or 了。。openresty 的 lua
select cert,priv from certs where domain = '*.baidu.com' or domain = 'a.baidu.com' |