1. 匹配QQ号必须为5位到12位数字 ^\d{5,12}$
12345
123456789101
2. 电话号码 \(?0\d{2}[-) ]?\d{8}|0\d{3}-\d{7}
(010)88886666,或022-22334455,或02912345678
010)12345678或(022-87654321或029 12345678
0\d{2}-\d{8}|0\d{3}-\d{7}:
一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。
3. 匹配url路径
https?://([^/\n]+/)*
(.+\/)
http://xxx.com/234234/fsa/23432.jpg
http://xxdfsax.com/hfgg/fsa/qrdsfsaf1.jpg
https://2342342afsdfds.com/sdfsdf/sdfcf34/fsa/23fwersdf.jpg
4. 匹配url路径后面的文件名
[^/]*\.[^/\n]+$
http://xxx.com/234234/fsa/23432.jpg
http://xxdfsax.com/hfgg/fsa/qrdsfsaf1.jpg
https://2342342afsdfds.com/sdfsdf/sdfcf34/fsa/23fwersdf.jpg
location:http核心模块
语法:location [=|~|~*|^~|@] /uri/ { ... }
默认值:no
使用字段:server
这个参数根据URI的不同需求来进行配置,可以使用字符串与正则表达式匹配,如果要使用正则表达式,你必须指定下列前缀:
1、~* 不区分大小写。
2、~ 区分大小写。
要确定该指令匹配特定的查询,程序将首先对字符串进行匹配,字符串匹配将作为查询的开始,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配查询的第一个正则表达式找到后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果。
在一些操作系统,如Mac OS X和Cygwin,字符串将通过不区分大小写的方式完成匹配(0.7.7),但是,比较仅限于单字节的语言环境。
正则表达式可以包含捕获(0.7.40),并用于其它指令中。
可以使用“^~”标记禁止在字符串匹配后检查正则表达式,如果最确切的匹配location有这个标记,那么正则表达式不会被检查。
使用“=”标记可以在URI和location之间定义精确的匹配,在精确匹配完成后并不进行额外的搜索,例如有请求“/”发生,则可以使用“location = /”来加速这个处理。
即使没有“=”和“^~”标记,精确的匹配location在找到后同样会停止查询。
nginx的location配置实际例子
location ~ .*\.(sh|flv|mp3)$
{
return 403;
}
location ^~ /html/scripts/loadhead_1.js {
access_log off;
root /opt/lampp/htdocs/web;
expires 600;
break;
}
下面是各种查询方式的总结:
4、如果第三条产生一个匹配,这个匹配将被使用,否则将使用第二条的匹配。
例 :
Shell代码
location = / {
# 只匹配 / 的查询.
[ configuration A ]
}
location / {
# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处理。
[ configuration D ]
}
各请求的处理如下例:
·/ -> configuration A
·/documents/document.html -> configuration B
·/images/1.gif -> configuration C
·/documents/1.jpg -> configuratio
注意你可以以任何顺序定义这4个配置并且匹配结果是相同的,但当使用嵌套的location结构时可能会将配置文件变的复杂并且产生一些比较意外的结果
网上这个挺好的nignx高级应用之location url匹配
精确匹配和前缀匹配都不支持正则匹配,一般前缀匹配通常用于匹配文件夹,如配置静态文件
大原则匹配优先级
精确匹配 > 前缀匹配 > 正则匹配 > 正常匹配 > 全匹配
小原则同级匹配
1. 正则匹配成功后停止匹配,非正则匹配成功还会接着匹配,选取最长匹配
2. 是否正则,是否最长
rewrite
语法:rewrite regex replacement flag
默认值:none
使用字段:server, location, if
按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。
注意重写规则只匹配相对路径而不是绝对的URL,如果想匹配主机名,可以加一个if判断,如:
if ($host ~* www\.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1为'/foo',而不是'www.mydomain.com/foo'
}
可以在重写指令后面添加标记。
·permanent - 返回301永久重定向。
arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。
args #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址。
body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
content_length #请求头中的Content-length字段。
content_type #请求头中的Content-Type字段。
cookie_COOKIE #cookie COOKIE变量的值
document_root #当前请求在root指令中指定的值。
document_uri #与uri相同。
host #请求主机头字段,否则为服务器名称。
hostname #Set to themachine’s hostname as returned by gethostname
http_HEADER
is_args #如果有args参数,这个变量等于”?”,否则等于”",空值。
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率。
query_string #与args相同。
request_body_file #客户端请求主体信息的临时文件名。
request_method #客户端请求的动作,通常为GET或POST。
remote_addr #客户端的IP地址。
remote_port #客户端的端口。
remote_user #已经经过Auth Basic Module验证的用户名。
request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
request_method #GET或POST
request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
scheme #HTTP方法(如http,https)。
server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
server_name #服务器名称。
server_port #请求到达服务器的端口号。