🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
rewrite 功能 实现URL地址改写 语法: rewrite regex replacement [flag]; flag标记: last: 完成重写后,重写后的,把重写后的地址,再次发给nginx服务器,如果被rewrite匹配到,又会改写 break: 一旦此rewrite规则重写完成之后,就直接进行后续处理 ![](https://box.kancloud.cn/3cf3c5ee9d30455c0888453498a81244_636x150.png) redirect: 将重写后的URI返回给客户端,状态码为302,指明临时重定向 permanent: if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; } 案例: 1) location ^~ /images/ { root /vhosts; rewrite ^/images/(.*\.png)$ /imgs/$1 break; } 2) 域名跳转 server { listen 80; server_name www.myweb.com; root /vhosts/web2/; } server { listen 80; server_name www.a.com; rewrite ^/ http://www.myweb.com/ break; location / { root "/vhosts/web1"; } 当客户端访问www.a.com 浏览器会直接跳转到www.myweb.com server { listen 80; server_name www.a.com mall.a.com; if ($http_host ~* ^(.*)\.a\.com$) { rewrite ^(.*) http://www.myweb.com$1; break; } 当客户端访问http://www.a.com/images/svn.png URL被nginx服务器重写成http://www.myweb.com/images/svn.png 3) 镜像 ![](https://box.kancloud.cn/4027c6fd742dcda3bb7287bce76dd7b1_619x387.png) 4)当访问http://bbs.a.com/ 时跳转到http://www.a.com/bbs/ server { listen 80; server_name bbs.a.com; location / { if ( $http_host ~* "^(.*)\.a\.com" ) { rewrite ^/(.*)$ http://www.a.com/$1 permanent; } } } 二)指令 1)if指令 该指令用来支持条件判断,并根据条件判断结果选择不同的nginx配置 if (condition) { ... } condition: 为判断条件,有如下设置方式 a:变量名 if ($slow) { limit_rate 10k; } if ($invalid_referer) { return 403; } b:使用比较运输费(=,!=) ![](https://box.kancloud.cn/ce977d59e9a6e10a71f723158f4fbeeb_618x170.png) c: 判断请求文件是否存在 -f 如果文件存在,if条件为true -e如果请求目录或文件存在,if条件为true -x如果请求文件有执行权限,if条件为true ![](https://box.kancloud.cn/440652411b35cfb06c8ffce539635c27_600x160.png) 三)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相同。 常用的正则 . 匹配除换行符以外的任意字符 ? 重复0次或1次 + 重复1次或多次 * 重复0次或多次 \d 匹配数字 ^ 以什么开始 $ 以什么结束 {n} 重复n次 {n,} 至少重复n次 [c] 匹配单个字符 [a-z] 匹配所有小写字母 [[:alpha:]] [[:digist:]] [[:alnum:]] [[:space:]]