rewrite 指令可以多次修改哀求的 URI。rewrite 的第一个参数是 URI必要匹配的正则表达式,第二个参数是将要替代的 URI。第三个参数可选,指示是否继承可以重写可能返回重定向代码(301或302)。譬喻:
- location /users/ { rewrite ^/users/(.*)$ /show?user=$1 break;
-
- }
您可以在 server 和 location 上下文中包罗多个 rewrite 指令。 Nginx 凭证它们产生的次序一个一个地执行指令。 当选择 server 时,server 中的 rewrite 指令将执行一次。
在 Nginx 处理赏罚一组 rewrite 指令之后,它按照新的 URI 选择 location 。 假如所选 location 仍然包括 rewrite 指令,它们将依次执行。 假如 URI 匹配全部,则在处理赏罚完全部界说的 rewrite 指令后,搜刮新的 location 。
以下示例将 rewrite 指令与 return 指令团结行使:
- server {
-
- ...
-
- rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;
-
- rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra last; return 403;
-
- ...
-
- }
诸如 /download/some/media/file 的 URI 被改为 /download/some/mp3/file.mp3 。 因为 last 符号,后续指令(第二个 rewrite 指令和 return 指令)被跳过,但 Nginx 继承以变动后的 URI 处理赏罚哀求。 相同地,诸如 /download/some/audio/file 的 URI 被替代为/download/some/mp3/file.ra。 假如 URI 不匹配 rewrite 指令,Nginx 将403 错误代码返回给客户端。
last 与 break的区别是:
- last : 在当前 server 或 location 上下文中遏制执行 rewrite 指令,可是 Nginx 继承搜刮与重写的URI匹配的 location,并应用新 location 中的任何 rewrite 指令(这意味着 URI 也许再次改变)。
- break :遏制当前上下文中 rewrite 指令的处理赏罚,并打消搜刮与新 URI 匹配的 location。 不会执行新 location中的 rewrite 指令。
附录
常用正则
- . : 匹配除换行符以外的恣意字符
- ? : 一再0次或1次
- + : 一再1次或更多次
- *: 一再0次或更多次
- d :匹配数字
- ^ : 匹配字符串的开始
- $ : 匹配字符串的先容
- {n} : 一再n次
- {n,} : 一再n次或更多次
- [c] : 匹配单个字符c
- [a-z]: 匹配a-z小写字母的恣意一个
全局变量
- $args : #这个变量便是哀求行中的参数,同$query_string
- $content_length : 哀求头中的Content-length字段。
- $content_type : 哀求头中的Content-Type字段。
- $document_root : 当前哀求在root指令中指定的值。
- $host : 哀求主机头字段,不然为处事器名称。
- $http_user_agent : 客户端agent信息
- $http_cookie : 客户端cookie信息
- $limit_rate : 这个变量可以限定毗连速度。
- $request_method : 客户端哀求的举措,凡是为GET或POST。
- $remote_addr : 客户端的IP地点。
- $remote_port : 客户端的端口。
- $remote_user : 已经颠末Auth Basic Module验证的用户名。
- $request_filename : 当前哀求的文件路径,由root或alias指令与URI哀求天生。
- $scheme : HTTP要领(如http,https)。
- $server_protocol : 哀求行使的协议,凡是是HTTP/1.0或HTTP/1.1。
- $server_addr : 处事器地点,在完成一次体系挪用后可以确定这个值。
- $server_name : 处事器名称。
- $server_port : 哀求达随处事器的端标语。
- $request_uri : 包括哀求参数的原始URI,不包括主机名,如:/foo/bar.php?arg=baz。
- $uri : 不带哀求参数的当前URI,$uri不包括主机名,如/foo/bar.html。
- $document_uri : 与$uri沟通。
譬喻哀求:http://localhost:88/test1/test2/test.php
- $host:localhost
- $server_port:88
- $request_uri:http://localhost:88/test1/test2/test.php
- $document_uri:/test1/test2/test.php
- $document_root:/var/www/html
- $request_filename:/var/www/html/test1/test2/test.php
【编辑保举】 - 让“群众少跑腿”,超融合助力政务云建树
- 从一份设置清单详解 Nginx 处事器设置
- SQL Server 毗连处事器错误的办理方案
- GPU云处事器深度进修机能模子初探
- 大数据企业家相聚清华,让相助与共赢碰撞出伶俐火花
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|