设为首页 收藏本站
查看: 905|回复: 0

[经验分享] Nginx的URL Rewrite基本指令

[复制链接]

尚未签到

发表于 2018-11-8 07:42:07 | 显示全部楼层 |阅读模式
  
  1、Nginx Rewrite规则相关指令:
  
  功能:实现URL的重写,通过Rewrite规则,可以实现规范的URL,根据变量来做URL转向及选择配置。
  作用范围:server{},location{},if{}
  优先级:
  执行server块的rewrite指令 > 执行location匹配 >执行选定的location中的rewrite指令。
  Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中Rewrite是最关键的指令。
  1.1)break指令
  语法:break
  默认值:none
  使用环境:server,location,if
  作用:break 终止匹配, 不再匹配后面的规则
  eg:
if (slow) {  
limit_rate 20k;
  
break;
  
}
  1.2)if指令
  语法:if(condition){...}
  默认值:none
  使用环境:server,location
  作用:该指令用于检测一个条件是否符合,如果条件符合,则执行大括号内的语句。if指令不支持嵌套,不支持多个条件&&和||处理。
  以下信息可以被指定为条件:
  (1)变量名,错误的值包括:空字符串“”,或者任何以0开始的字符串。
  (2)变量比较可以使用“=”和“!=”(等于和不等于)运算符
  (3)正则表达式模式匹配可以使用“~”和“~*”符号
  (4)~  为区分大小写匹配
  (5)~* 为不区分大小写匹配
  (6)!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
  (7)-f和!-f用来判断是否存在文件
  (8)-d和!-d用来判断是否存在目录
  (9)-e和!-e用来判断是否存在文件或目录
  (10)-x和!-x用来判断文件是否可执行
DSC0000.png

  1.3)return指定:
  语法:return code
  默认值:none
  使用环境:server,location,if
  作用:该指令用于结束规则的执行并返回状态码给客户端。状态码可以使用这些值:204、400、402-406、408、410、411、413、416、500-504.此外,非标准状态码444将以不发送任何Header头的方式结束连接:
  eg:访问URL以.sh和。bash结束,返回状态码403.
location `.*\.(sh|bash)?$  
{
  
return 403;
  
}
  1.4)rewrite指令:
  语法: rewrite regex replacement flag
  默认值:none
  使用环境:server,location,if
  作用:该指令根据变大时来重定向URL,或者修改字符串,指令根据配置文件中的顺序来执行。
  Rewrite指令的最后一下参数为flag标记,支持的flag标记有:
  last 相当于Apache里的[L]标记,表示完成rewrite
  break 本条规则匹配完成之后,终止匹配,不再匹配后面的规则。
  redirect 返回302临时重定向 地址栏会显示跳转后的地址
  permanent 返回301永久重定向 地址栏会显示跳转后的地址
  1.5)set指令:
  语法:set variable value
  默认值:none
  使用环境:server,location,if
  作用:该指令用于定义一个变量,并给变量赋值,变量的值可以为文本,变量及文本变量的联合。
  eg:set $varname 'hello'
  1.6) uninitalized_variable_warn指令:
  语法:unitialized_variable_warn onloff
  默认值:unitialized_variable_warn on
  使用环境:http、server、location、if
  作用:该指令用于开启或者关闭未初始化变量的警告信息,默认值为开启。
  1.7)Nginx Rewrite可以用到的全局变量:
  $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相同。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-632121-1-1.html 上篇帖子: nginx_笔记分享_1_安装篇(nginx-1.0.5+php-fpm5.3.6+mysql) 下篇帖子: 玩转 Nginx 之:使用 Lua 扩展 Nginx 功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表