概述
return指令
功能:
- 停止处理请求,直接返回响应码或重定向到其他URL
- 执行return指令后,location中后续指令将不会被执行
语法:
return code [text];
return code URL;
return URL;
return code URL;中的code一般是重定向状态码。
重定向状态码有:
- 301:永久重定向(HTTP1.0标准)
- 302:临时重定向,禁止被缓存(HTTP1.0标准)
- 303:临时重定向,禁止被缓存,允许改变方法(HTTP2.0标准)
- 307:临时重定向,禁止被缓存,不允许改变方法(HTTP2.0标准)
- 308:永久重定向,不允许改变方法(HTTP2.0标准)
默认值:无
上下文:server、location、if
示例:
1、配置nginx.conf,返回状态码
server {
listen 8080;
server_name localhost;
charset utf-8;
location / {
return 200;
}
}
访问路径curl localhost:8080 -i
,会看到头信息的状态码
2、配置nginx.conf,返回状态码和文本
server {
listen 8080;
server_name localhost;
charset utf-8;
location / {
return 200 "this is http code 200";
}
}
信息会放在data中传输,使用360浏览器打开,会显示文本信息,使用谷歌浏览器打开会下载一个文本文件。
3、配置nginx.conf,重定向其他URL
server {
listen 8080;
server_name localhost;
charset utf-8;
location / {
return 302 /download/;
}
location /download/ {
root /home/nginx;
autoindex on;
autoindex_exact_size off;
autoindex_format html;
autoindex_localtime on;
}
}
当浏览器输入http://101.200.147.104:8080
的时候会重定向到/download/
路径下,一定要跟配置的/download/
一致,在浏览器上访问的就是http://101.200.147.104:8080/download/
,如下图所示:
4、配置nginx.conf,不使用状态码,也能重定向其他URL,但是要加具体RUL路径
server {
listen 8080;
server_name localhost;
charset utf-8;
location / {
#return 302 /download/;
return http://101.200.147.104:8080/download/;
}
location /download/ {
root /home/nginx;
autoindex on;
autoindex_exact_size off;
autoindex_format html;
autoindex_localtime on;
}
}
rewrite指令
功能:rewrite指令能够根据匹配的正则表达式,重写URL。
语法:rewrite regex replacement [flag]
flag可选值及含义:
- last:重写后的URL发起新请求,再次进入server段,重试location中的匹配
- break:直接使用重写后的URL,不再匹配其他location中的语句
- redirect:返回302临时重定向
- permanent:返回301永久重定向
默认值:无
上下文:server、location、if
示例:
server {
listen 8080;
server_name localhost;
charset utf-8;
location /images {
rewrite /images/(.*) /download/$1;
}
location /download/ {
root /home/nginx;
}
}
当浏览器上输入http://101.200.147.104:8080/images/
的时候,会被重定向到/download/
页面,其中/images/(.*) /download/$1
中表示当访问images下的任意文件时,都重定向到/download/
目录下,$1表示前项引用,即引用前面的正则,即(.*)。
如果后面跟上break
,就不会走下面的/download/
,而是直接返回images下的文件,而last则会继续走下面的/download/
。
return和rewrite指令的执行顺序
示例:
server {
listen 8080;
server_name localhost;
charset utf-8;
location /images {
rewrite /images/(.*) /download/$1 last;
return 200;
}
location /download/ {
root /home/nginx;
rewrite /download/(.*) /pics/$1;
return 200;
}
location /pics/ {
return 200;
}
}
示例分析:
- 第一个
/images
的rewrite指令中有last指令,所以会继续当前server中的location重写匹配,会直接跳到/download/
中,而第一个return则不会执行; - 在
/download/
中,rewrite指令后面没有last执行,则会顺序执行到return 200;语句,而不会继续到/pics/下; - 如果在
/download/
的rewrite中加入break语句,则会显示pics中的内容,而不会显示 /pics/中的return 200。如:
location /download/ {
root /home/nginx;
rewrite /download/(.*) /pics/$1 break;
return 200;
}
location /pics/ {
return 200;
}
最后
以上就是高贵酸奶为你收集整理的Nginx(8)_return和rewrite的全部内容,希望文章能够帮你解决Nginx(8)_return和rewrite所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复