首页 > 代码库 > Nginx学习笔记14rewrite之(一)permanent永久重定向
Nginx学习笔记14rewrite之(一)permanent永久重定向
Nginx的rewrite功能可以将对一个URL的请求,按照正则表达式的规则,重定向到另一个URL。为了对rewrite功能的permanent永久重定向进行更好的了解,本文使用curl来访问相关的页面。
Syntax: rewrite regex replacement [flag];
Default: —
Context: server, location, if
rewrite Nginx配置文件中用于配置URL rewrite指令。
regex 待匹配的URL正则表达式。
replacement 匹配后跳转的目标URL,可使用正则表达式的分组功能占位符$1,$2,$3等。
flag 标志,支持四种标志。
标志flag |
说明 |
permanent |
HTTP 301永久移动,目标地址支持相对地址和绝对地址。 |
redirect |
HTTP 302 临时重定向,目标地址为相对地址,即本地地址。 |
last |
停止当前指令集,可以进行新的location匹配。 |
break |
停止当前指令集。 |
(1)使用相对地址
本试验使用rewrite将对URL /app/的访问,通过HTTP 301跳转到一个本地地址, /hello/。
Nginx配置:
location ~ ^/app/ {
rewrite ^/app/(.*)$ /hello/$1 permanent;
}
运行结果:
$curl -v http://ng.coe2coe.me:8000/app/
* Hostname was NOT found in DNS cache
* Trying 192.168.197.101...
* Connected to ng.coe2coe.me (192.168.197.101) port 8000 (#0)
> GET /app/ HTTP/1.1
> User-Agent: curl/7.35.0
> Host: ng.coe2coe.me:8000
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
* Server nginx/1.11.8 is not blacklisted
< Server: nginx/1.11.8
< Date: Sun, 09 Jul 2017 09:57:48 GMT
< Content-Type: text/html
< Content-Length: 185
< Location: http://ng.coe2coe.me:8000/hello/
< Connection: keep-alive
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.11.8</center>
</body>
</html>
* Connection #0 to host ng.coe2coe.me left intact
(2)使用绝对地址
本实验先使用绝对地址的重定向,将/app2/重定向到一个绝对地址http://
Nginx配置:
#对/app/的访问将使用301重定向到/hello/,相对于本地地址。
location ~ ^/app/ {
rewrite ^/app/(.*)$ /hello/$1 permanent;
}
#对/app2/的访问将使用301重定向到/app/,使用了绝对地址。
location ~ ^/app2/ {
rewrite ^/app2/(.*)$ $scheme://$http_host/app/ permanent;
}
运行结果:
curl -v http://ng.coe2coe.me:8000/app2/
* Hostname was NOT found in DNS cache
* Trying 192.168.197.101...
* Connected to ng.coe2coe.me (192.168.197.101) port 8000 (#0)
> GET /app2/ HTTP/1.1
> User-Agent: curl/7.35.0
> Host: ng.coe2coe.me:8000
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
* Server nginx/1.11.8 is not blacklisted
< Server: nginx/1.11.8
< Date: Sun, 09 Jul 2017 10:08:17 GMT
< Content-Type: text/html
< Content-Length: 185
< Connection: keep-alive
< Location: http://ng.coe2coe.me:8000/app/
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.11.8</center>
</body>
</html>
* Connection #0 to host ng.coe2coe.me left intact
随后进一步使用curl访问Location后的URL,可取得最终页面URL。
curl -v http://ng.coe2coe.me:8000/app/
此处省略了curl的输出。
Nginx学习笔记14rewrite之(一)permanent永久重定向