最近开发 H5,遇到的问题:微信 JSSDK 分享接口如何分享支持网页授权的拼接地址?
JSSDK 分享的链接域名必须与当前公众号配置的 JS 安全域名一致,但获取微信用户信息又必须用微信指定的规则拼接访问地址,那就真的没办法实现了吗?(陷入僵局,跳不出这个了)
后来有网友提供了思路:分享自己服务器上的 URL,在用户点开的时候,进行重定向即可。(另辟蹊径,醍醐灌顶)
查资料:
1、rewrite 是 Nginx 服务器提供的一个重要功能,可以实现 URL 重定向功能。
2、理解地址重写和地址转发
地址重写是为了实现地址的标准化,比如地址栏中输入的 www.baidu.cn 会被重写到 www.baidu.com 上,浏览器的地址栏也会显示 www.baidu.com。
地址转发是指在网络数据传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址并将数据转发到最近的局域网的过程。
地址重写和地址转发的不同点:
3、rewrite 指令的使用
该指令是通过正则表达式的使用来改变 URL。可以同时存在一个或多个指令。需要按照顺序依次对 URL 进行匹配和处理。
该指令可以在 server 或 location 块中配置,语法结构如下:
rewrite regex replacement [flag];
4、开始~
rewrite ^/ai-share-(.*)/(.*)$ https://open.weixin.qq.com/connect/oauth2/authorize?appid=__APPID__&redirect_uri=https%3A%2F%2F__YUMING__%2Fai-$1&response_type=code&scope=snsapi_userinfo&state=$2#wechat_redirect permanent;
说明:
rewrite 为固定关键字,表示开始进行rewrite匹配规则。
regex 为 ^/ai-share-(.*)/(.*)$。 这是一个正则表达式,匹配完整的域名和后面的路径地址。
replacement就是 https://open.weixin.qq.com/connect/oauth2/authorize?appid=__APPID__&redirect_uri=https%3A%2F%2F__YUMING__%2Fai-$1&response_type=code&scope=snsapi_userinfo&state=$2#wechat_redirect,其中$1、$2是取regex部分()里面的内容。匹配成功后跳转到该地址。
flag 就是 permanent,代表永久重定向的含义,即跳转到上面的地址。
常用正则表达式:
字符 | 描述 |
\ | 将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用 |
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或者多次 |
+ | 匹配前面字符串一次或者多次 |
? | 匹配前面字符串的零次或者一次 |
. | 匹配除“\n”之外的所有单个字符 |
(pattern) | 匹配括号内的pattern |
相关命令:
// 检查nginx配置文件:
nginx -t // syntax is ok, 这种情况才允许重新启动nginx
// 重新启动 nginx
systemctl restart nginx
// 查看nginx状态
systemctl status nginx
参考文章:
Nginx中的Rewrite的重定向配置与实践
Nginx的rewrite(地址重定向)剖析