location / { 

            index  index.html index.htm index.php l.php; 

 if (!-e $request_filename) { 

 rewrite /[ac]\d+\.html /index/index/home last; 

 rewrite ^/admin$ /admin/login/login last; 

 rewrite ^(.*)$ /index.php?s=$1 last; 

 break; 

  

 } 

           autoindex  off; 
        }

1.break在重写语句后会停止后续的重写规则:rewrite ^(.*)$ /index.php?s=$1 break; 包括其他的location均不会再执行匹配

2.单独写:rewrite ^(.*)$ /index.php?s=$1 last;
break;

  只会停止本location的重写规则。会用重写后的url执行其他的location

3.last会用重写后的url重新匹配所有的重写规则。包括本location里面的,意思为整个server里面的重新匹配。

4.注意:非常需要注意的是,重写规则会先匹配location外层的 如location =/1.php{rewrite ^(.*)$ /2.php last; , location ~ \.php(.*)$ ,location /flag { rewrite ^(.*)$ /1.php last; 。三种规则。访问http://localhost/flag/1.php并不会访问到2.php

而是出现:No input file specified.  因为 已经匹配到了location ~ \.php(.*)$规则。由于没有/flag/1.php所以出现找不到文件。

所以想要访问/flag/1.php得到 2.php的内容的话:修改location /flag { rewrite ^(.*)$ /1.php last 为 location ^~ /flag { rewrite ^(.*)$ /1.php last

5.nginx location的url 匹配优先级:

            1、=  首先是精准匹配优先级最高

            2、^~ 其次是以某特定常规字符串开头的匹配,这个不是正则

            3、~ 、 ~*、!~、!~* 再次是按顺序的正则匹配,依次为区分大小写的正则匹配、不区分大小写的正则匹配、依次为区分大小写的正则不匹配、不区分大小写的正则不匹配、

            4、最后是 / 的通用符匹配

            以上依次为nginx location的url 匹配优先级

location优先级示例

配置项如下:



location = / {# 仅仅匹配请求 /[ configuration A ]}location / {# 匹配所有以 / 开头的请求。# 但是如果有更长的同类型的表达式,则选择更长的表达式。# 如果有正则表达式可以匹配,则优先匹配正则表达式。[ configuration B ]}location /documents/ {# 匹配所有以 /documents/ 开头的请求。# 但是如果有更长的同类型的表达式,则选择更长的表达式。# 如果有正则表达式可以匹配,则优先匹配正则表达式。[ configuration C ]}location ^~ /images/ {# 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。# 所以,即便有符合的正则表达式location,也不会被使用[ configuration D ]}location ~* \.(gif|jpg|jpeg)$ {# 匹配所有以 gif jpg jpeg结尾的请求。# 但是 以 /images/开头的请求,将使用 Configuration D[ configuration E ]}

请求匹配示例



/ -> configuration A/index.html -> configuration B/documents/document.html -> configuration C/images/1.gif -> configuration D/documents/1.jpg -> configuration E

注意,以上的匹配和在配置文件中定义的顺序无关。