location匹配规则

1. 实例

  1. server{
  2. location = \ {
  3. [配置A]
  4. }
  5. location / {
  6. [配置B]
  7. }
  8. location = /images/ {
  9. [配置C]
  10. }
  11. location ^~ /static/{
  12. [配置D]
  13. }
  14. localtion ~* \.(gif|jpg|png){
  15. [配置E]
  16. }
  17. }

2. location语法规则

语法:

  1. location = | ~ | ~* | ^~ | @ /url/{ //注意 =、~、~*、^~ 、@是location的匹配规则,”|“表示或者

  2. ......省略其他配置
  3. }

规则说明:

符号 含义
= 字面精准匹配,如果匹配,则跳出匹配过程(不再进行正则匹配)
~ 开头区分大小写的正则匹配
~* 开头不区分大小写的正则匹配
^~ 开头表示uri以某哥常规字符串开头,理解为匹配url路径即可
/ 通用匹配,在没有正则表达式匹配时,任何请求都会匹配到
@ 不是普通的location匹配,用于location内部重定向的变量
~ 开头区分大小写的正则匹配

多个location配置的匹配顺序:

  • 首先匹配:"="
  • 其次匹配:"^~"
  • 再匹配:文件location书写顺序
  • 最后把所有请求交给通配符("/")

注意:每次匹配成功后,停止匹配,会按照本匹配的location处理请求

按照上面实例进行说明匹配顺序:

  • 首先对比第一个location,如果匹配就会停止匹配,并按照配置A进行处理请求:
  1. location = \ {
  2. [配置A]
  3. }
  • 其次对比第二个location,如果匹配就会停止匹配,并按照配置D进行处理请求:
  1. location ^~ /static/{
  2. [配置D]
  3. }
  • 再按照顺序依此进行对比,直到找到匹配的才会停止,并按照所匹配的配置*进行处理请求
  • 如果以上无任何匹配项则会选择通用选项,并按照所匹配的配置B进行处理请求:
  1. location / {
  2. [配置B]
  3. }

3. 应用举例

  • 精准规则(=)
  1. location = / {
  2. root /var/ww/html/;
  3. }

此规则表示只匹配以默认地址进行访问的请求,访问地址:http://NginxIP/

  • 匹配url路径(^~)
  1. location ^~ /static/ {
  2. root /var/www/html/static;
  3. }

此规则表示只匹配以" /static/ "开头的地址进行访问的请求,访问地址:http://NginxIP/static/

  • 忽略大小写(~*)
  1. location ~* \.(png|gif|jpg){
  2. root /var/www/html/;
  3. }

此规则表示只匹配" *.png | *.gif | *.jpg "的文件,访问地址:http://NginxIP/test.png

  1. location ~* /Test/ {
  2. root /var/www/html/;
  3. }

此规则表示匹配url地址中存在Test的访问请求,不区分大小写test也可以,访问地址:http://NginxIP/test/

  • 区分大小写(~)
  1. location ~ /Test/{
  2. root /var/www/html/;
  3. }

此规则表示匹配url地址中存在Test的访问请求,区分大小写,test是进行匹配的,访问地址:http://NginxIP/Test/

  • 默认匹配(所有规则都可匹配)
  1. location / {
  2. root /var/www/html;
  3. }

此规则为默认匹配,他可以匹配所有以默认地址访问的链接,访问地址:http://NginxIP/login.html

  • 内部跳转(@)
  1. location @index_error{
  2. root /var/www/error/
  3. }

此规则表示匹配以 "/index/ "开头的请求,如果链接状态404,会匹配到这条规则

rewrite规则详解

nginx的rewrite功能和apache一样,rewrite的主要功能是实现RUL地址的重定向。Nginx的rewrite功能是由PCRE软件支持,rewrite模块即ngx_http_rewrite_module模块。从某种意义上可以说为了美观或者搜索引起的友好搜索,提高排名等

1.实例

  1. server{
  2. listen 80;
  3. server_name www.jkyst.xyz jkyst.xyz;
  4. if($host != 'www.jkyst.xyz' ){
  5. rewrite ^/(.*)$ http://www.jkyst.xyz/$1 permanent;
  6. }
  7. location ~.*\.(png|gif|jpg){
  8. return 403;
  9. }
  10. }

2.rewrite语法规则

语法:

  1. rewrite regex replacement [flag]

rewrite:rewrite重写的关键字不可省略

regex:这里写的是正则表达式

replacement:这里是重新内容

flag:这里是最后的flag标记

flag标记说明:

flag标记 说明
last 也就是apache里的(L)标记,表示完成rewrite,URL地址不会改变
break 本条规则匹配成功后,会停止匹配,不再匹配后面的规则,URL地址不会改变
redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent 返回301永久重定向,浏览器地址栏显示跳转后的URL地址,Nginx返回response状态码301

相关符号说明:

符号 说明
* 代表前面0或者多个字符
+ 代表前面1或者多个字符
? 代表前面0或1个字符
^ 代表字符串的开始位置
$ 代表字符串结束位置
$n 代表字符串结束第n个参数
. 通配符,代表任何字符

3.应用实例

  • 多域名跳转到同一域名
  1. server{
  2. listen 80;
  3. server_name www.jkyst.xyz jkyst.xyz abc.jkyst.xyz;
  4. if($host != 'www.jkyst.xyz'){
  5. rewrite ^/(.*)$ http://www,jkyst.xyz/$1 permanent;
  6. }
  7. }

当访问 "abc.jkyst.xyz" 时会自动跳转到 "www.jkyst.xyz",这里出现 "if" 语句用于判断,判断结果为true则执行语句内部的 rewrite重写

  • 当文件不存在时重定向到指定文件
  1. server{
  2. listen 80;
  3. server_name www.jkyst.xyz;
  4. if(!-e $request_filename){
  5. rewrite ^/test/(.*)$ http://www.jkyst.xyz/test1/$1 permanent;
  6. }
  7. }

当访问 "test" 目录下的文件或目录不存在时,则跳转到 "test1"下面的此文件或者目录,跳转后会将URL进行转换

  1. server{
  2. listen 80;
  3. server_name www.jkyst.xyz;
  4. if(!-e $request_filename){
  5. rewrite ^/test/(.*)$ index.html last;
  6. }
  7. }

表示当访问 "test" 目录下的文件或目录不存在时,则重定向到 "index.html"文件,跳转后URl不会进行转换

  1. server{
  2. listen 80;
  3. server_name www.jkyst.xyz;
  4. if(!-e $request_filename){
  5. rewrite ^/test/([0-9a-z]+)/([0-9a-z]+)/(.*)$ http://www.jkyst.xyz/test/$1$2$3 permanent;
  6. }
  7. }

目录切换,表示将原目录转换成其他目录,【0-9a-z】表示转换后目录名称

  • 禁止访问.sh后缀的文件
  1. server{
  2. ......其他配置
  3. location ~.*\.(sh)${
  4. return 405;
  5. }
  6. }

表示当访问 "*.sh"的文件就会返回405错误

  • 匹配用户浏览器代理信息
  1. server{
  2. listen 80;
  3. server_name www.jkyst.xyz;
  4. if ( $http_user_agent ~* ("Android")|(iPhone)){
  5. rewrite ^/test/(.*)$ http://www.jkyst.xyz/test/$1 permanent;
  6. }
  7. }

表示当匹配到浏览代理为Android和iPhone时进行重定向 "test"目录下的文件,改变访问的地址

  • 禁止htaccess
  1. server{
  2. location ~//.ht {
  3. deny all;
  4. }
  5. }

4.文件目录匹配

参数 介绍
-f 判断文件是否存在 返回值true为存在
!-f 判断文件是否存在 返回值false为不存在
-d 判断目录是否存在 返回值true为存在
!-d 判断目录是否存在 返回值true为不存在
-e 判断文件或目录是否存在 返回值true为存在
!-e 判断文件或目录是否存在 返回值true为不存在
-x 判断文件是否可执行 返回值true为可执行
!-x 判断文件是否可执行 返回值true为不可执行

举例说明:

  1. server{
  2. listen 80;
  3. server_name www.jkyst.xyz;
  4. if(!-e $request_filename){
  5. rewrite ^/test/(.*)$ http://www.jkyst.xyz/test1/$1 permanent;
  6. }
  7. }

判断文件或目录是否存在

nginx location匹配及rewrite规则的更多相关文章

  1. Nginx location 匹配规则

    1. default_server: 当请求没有匹配到服务器中配置的任何一个server的时候,会默认把请求route到配置了default_server的virtual host中.参考地址:htt ...

  2. nginx配置location总结及rewrite规则写法【转】

    转自 nginx配置location总结及rewrite规则写法 | Sean's Noteshttp://seanlook.com/2015/05/17/nginx-location-rewrite ...

  3. Nginx中的 location 匹配和 rewrite 重写跳转

    Nginx中的location匹配和rewrite重写跳转 1.常用的Nginx正则表达式 2.location 3.rewrite 4.rewrite实例 1.常用的Nginx正则表达式: ^ :匹 ...

  4. Nginx 常用全局变量 及Rewrite规则详解

    每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...

  5. nginx location匹配顺序及CI框架的nginx配置

    Nginx location匹配顺序如下: 用前缀字符串定义的location规则对URI进行匹配测试. =号定义了精确的前缀字符串匹配,如果发现精确匹配则使用当前规则.否则继续下一步匹配. 匹配其它 ...

  6. Nginx与Apache的Rewrite规则的区别

    一.Nginx Rewrite规则相关指令 Nginx Rewrite规则相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令.一个简单的Nginx R ...

  7. Nginx配置location总结及rewrite规则写法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "Helvetica Neue"; color: #323333 } p. ...

  8. 转:Nginx 配置 location 总结及 rewrite 规则写法

    转: http://www.linuxidc.com/Linux/2015-06/119398.htm 1. location正则写法 一个示例: location =/{ # 精确匹配 / ,主机名 ...

  9. 【转】nginx配置location总结及rewrite规则写法

    原文:http://seanlook.com/2015/05/17/nginx-location-rewrite/ 1. location正则写法 location = / { # 精确匹配 / ,主 ...

随机推荐

  1. Flex布局如何实现最后一个元素右对齐,或者第一个元素左对齐

    先来看看一个例子 在一个div我们把四个按钮全部放到右边去了,看下效果↓ 这个时候我们想把第一个按钮左对齐,其他保持不变 这时候我们来个第一个按钮样式上加上 :margin-right: auto; ...

  2. python字符串前面加上'r'的作用

    在打开文件的时候open(r'c:\....') 加r和不加''r是有区别的 'r'是防止字符转义的 如果路径中出现'\t'的话 不加r的话\t就会被转义 而加了'r'之后'\t'就能保留原有的样子 ...

  3. 问题 C: 神奇的口袋

    #include <cstdio> using namespace std; int n1; int nums[99]; int help(int i, int sum) { if (su ...

  4. python3中的参数*args

      python的传参是如何实现的 # 将未拆包的数据进行传参 def run(a,*args): #第一个参数传给了a print(a) # args是一个元组,里面是2和3两个参数 print(a ...

  5. ElementUI的Table-column_render-header自定义表头

    ElementUI的Table表格,官方网站上提供了很多样式,但是在日常开发中还会碰到各种情况,显然官方提供的是不能满足需求的.那么,我们就根据自己的需求对table进行改造. 先丢出关于Table的 ...

  6. Linux一些基本命令、inode定义、软硬链接

    1.创建普通文件命令:touch 命令 2.创建目录文件命令:mkdir 命令 3.删除普通文件命令:rm 命令 4.删除目录文件命令:rmdir 命令 5.给普通文件写东西命令:vim 命令 6.查 ...

  7. python基础(1):第一个python程序的编写

    1.第一个python编程 1.1 python的安装 1> https://www.python.org/  进入python官网,选择目标版本进行download 2> 点击setup ...

  8. Arcgis runtime sdk .net 二次开发

    前段时间研究了下 arcgis runtime sdk .net 二次开发··这里做个笔记 runtime版本为100.6 基于WPF 开发 命名空间引入 xmlns:esri="http: ...

  9. 缓存 - 数据缓存 - IndexedDB - Dexie.js

    Classes Dexie DexieError Collection and():Add JS based criteria to collection(向集合添加基于JS的条件) delete() ...

  10. 使用pycharm搜索框和正则表达式匹配内容

    使用pycharm搜索框和正则表达式匹配内容原创薯饼__ 最后发布于2019-03-04 19:28:53 阅读数 660 收藏展开有时候我们要在爬虫网站中匹配各种各样的文本块,以获取需要的信息,每一 ...