Nginx学习笔记14rewrite之permanent永久重定向

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx学习笔记14rewrite之permanent永久重定向相关的知识,希望对你有一定的参考价值。

nginxrewrite功能可以将对一个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永久重定向的主要内容,如果未能解决你的问题,请参考以下文章

Nginx学习笔记16rewrite之break

Nginx学习笔记17rewrite之last

Nginx之rewrite使用

Nginx中的rewrite指令(break,last,redirect,permanent)

nginx配置指令rewrite的last、break、redirect、permanent参数详解

Nginx笔记之Rewrite规则