家资是何物,积帙列梁梠。这篇文章主要讲述使用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服务器内部实现跳转
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
用宿主机访问一下查看是否会有缓存
文章图片
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域名】
文章图片
推荐阅读
- Java中的I/O流
- Scikit-learn——LogisticRegression与SGDClassifier
- linux之pkill命令
- npm常用命令速查表
- Nginx实现多级反向代理客户端IP透传
- 小胖学Linux day26~27:yum管理工具
- YAML语法Ansible Playbook剧本Ansible变量
- 安全必读:电脑是否中毒?揭秘杀毒的几个误区
- 如何避开攻击?QQ安全聊天的一些小技巧!