nginx rewrite 重定向

最近开发 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];
  • rewrite : 实现URL重写的命令;
  • regex:用于匹配 URL 的正则表达式;
  • replacement:将 regex 正则匹配到的内容替换成 replacement;
  • flag:flag 标记,可取值如下:
    • last:本条规则匹配完成后,继续向下匹配新的 location URL 规则;(不常用)
    • break:本条规则匹配完成即终止,不再匹配后面的任何规则(不常用)。
    • redirect:返回302临时重定向,浏览器地址会显示跳转新的URL地址。
    • permanent:返回301永久重定向。浏览器地址会显示跳转新的URL地址。

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(地址重定向)剖析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值