使用rewrite规则实现将所有到a域名的访问rewrite到b域名

家资是何物,积帙列梁梠。这篇文章主要讲述使用rewrite规则实现将所有到a域名的访问rewrite到b域名相关的知识,希望能为你提供帮助。
rewrite 指令rewrite是通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,是按照顺序依次对URI进行匹配,rewrite主要是针对用户的请求的URL和URI来做具体的处理的。
nginx的rewrite的官方文档:https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
语法格式:

Syntax: rewrite regex replacement [flag]; Default:— Context:server, location, if

正则表达式格式:
.#匹配除换行符以外的任意字符 \\w#匹配字母或数字或下划线或汉字 \\s#匹配任意的空白符 \\d#匹配数字 \\b#匹配单词的开始或结束 ^#匹配字付串的开始 $#匹配字符串的结束 *#匹配重复零次或更多次 +#匹配重复一次或更多次 ?#匹配重复零次或一次 (n) #匹配重复n次 n,#匹配重复n次或更多次 n,m#匹配重复n到m次 *?#匹配重复任意次,但尽可能少重复 +?#匹配重复1次或更多次,但尽可能少重复 ??#匹配重复0次或1次,但尽可能少重复 n,m?#匹配重复n到m次,但尽可能少重复 n,?#匹配重复n次以上,但尽可能少重复 \\W#匹配任意不是字母,数字,下划线,汉字的字符 \\S#匹配任意不是空白符的字符 \\D#匹配任意非数字的字符 \\B#匹配不是单词开头或结束的位置 [^x]#匹配除了x以外的任意字符 [^devops]#匹配除了devops这几个字母以外的任意字符

rewrite flag的使用利用nginx的rewrite的指令,可以实现url的重新跳转,rewrite有四种不同的flag,分别是redirect(临时重定向302)、permanent(永久重定向301)、break和last。其中前两种是跳转型flag,后两种是代理型
  • 跳转型指由客户端浏览器重新对新地址进行请求
  • 代理型是在WEB服务器内部实现跳转
flag 说明
redirect; #临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求; 使用相对路径,或者http://或https://开头,状态码:302permanent; #重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301break; #重写完成后,停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置; 结束循环,建议在location中使用 #适用于一个URL一次重写last; #重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用 #适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户

301永久重定向
  • 域名永久型调整,即域名永远跳转至另外一个新的域名,之前的域名再也不使用,跳转记录可以缓存到客户端浏览器
  • 永久重定向会缓存DNS解析记录, 浏览器中有 from disk cache 信息,即使nginx服务器无法访问,浏览器也会利用缓存进行重定向
实例:实现域名的永久重定向
#准备好以下两个nginx配置文件和两个页面文件 root@Nginx:~# vim /apps/nginx/conf.d/pc.conf server listen 80; server_name www.zhanggui.com; location / root /data/nginx/html/pc; index index.html index.hml; rewrite / http://www.zhanggui.org redirect; root@Nginx:~# vim /apps/nginx/conf.d/mobile.conf server listen 80; server_name m.zhanggui.com; location / root /data/nginx/html/mobile; indexindex.html index.htm; root@Nginx:~# cat /data/nginx/html/pc/index.html pc website root@Nginx:~# cat /data/nginx/html/mobile/index.html mobile website #配置完后重新加载以下nginx配置文件 root@Nginx:~# nginx -t nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful root@Nginx:~# nginx -s reload #在测试访问一下是否重定向成功 [root@Centos8 ~]#curl www.zhanggui.com -ikL HTTP/1.1 301 Moved Permanently Server: nginx Date: Sat, 23 Apr 2022 12:17:06 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive Location: http://m.zhanggui.comHTTP/1.1 200 OK Server: nginx Date: Sat, 23 Apr 2022 12:17:06 GMT Content-Type: text/html Content-Length: 15 Last-Modified: Fri, 15 Apr 2022 11:17:02 GMT Connection: keep-alive ETag: "6259542e-f" Accept-Ranges: bytesmobile website

用宿主机访问一下查看是否会有缓存
使用rewrite规则实现将所有到a域名的访问rewrite到b域名

文章图片

302临时重定向
  • 域名临时重定向,告诉浏览器域名不是固定重定向到当前目标域名,后期可能随时会更改,因此浏览器不会缓存当前域名的解析记录,而浏览器会缓存永久重定向的DNS解析记录,这也是临时重定向与永久重定向最大的本质区别。
实例:实现域名的临时重定向
root@Nginx:~# vim /apps/nginx/conf.d/pc.conf server listen 80; server_name www.zhanggui.com; location / root /data/nginx/html/pc; index index.html index.hml; rewrite / http://www.zhanggui.org permanent; root@Nginx:~# vim /apps/nginx/conf.d/mobile.conf server listen 80; server_name m.zhanggui.com; location / root /data/nginx/html/mobile; indexindex.html index.htm; root@Nginx:~# cat /data/nginx/html/pc/index.html pc website root@Nginx:~# cat /data/nginx/html/mobile/index.html mobile website #配置完后重新加载以下nginx配置文件 root@Nginx:~# nginx -t nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful root@Nginx:~# nginx -s reload #在测试访问一下是否重定向成功 [root@Centos8 ~]#curl www.zhanggui.com -ikL HTTP/1.1 302 Moved Temporarily Server: nginx Date: Sat, 23 Apr 2022 12:27:42 GMT Content-Type: text/html Content-Length: 138 Connection: keep-alive Location: http://m.zhanggui.comHTTP/1.1 200 OK Server: nginx Date: Sat, 23 Apr 2022 12:27:42 GMT Content-Type: text/html Content-Length: 15 Last-Modified: Fri, 15 Apr 2022 11:17:02 GMT Connection: keep-alive ETag: "6259542e-f" Accept-Ranges: bytesmobile website

【使用rewrite规则实现将所有到a域名的访问rewrite到b域名】
使用rewrite规则实现将所有到a域名的访问rewrite到b域名

文章图片


    推荐阅读