跳至正文

nginx 伪静态Rewrite正则资源汇总

  • 运维

正则表达式匹配 :

~				区分大小写匹配
~*				不区分大小写匹配 (匹配 firefox 的正则同时匹配 FireFox)
!~				区分大小写不匹配
!~*				不区分大小写不匹配
.				匹配除换行符以外的任意字符
\w				匹配字母或数字或下划线或汉字
\s				匹配任意的空白符
\d				匹配数字
\b				匹配单词的开始或结束
^				匹配字符串的开始
$				匹配字符串的结束

*				重复零次或更多次
+				重复一次或更多次
?				重复零次或一次
{n}				重复n次
{n,}			重复n次或更多次
{n,m}			重复n到m次
*?				重复任意次,但尽可能少重复
+?				重复1次或更多次,但尽可能少重复
??				重复0次或1次,但尽可能少重复
{n,m}?			重复n到m次,但尽可能少重复
{n,}?			重复n次以上,但尽可能少重复

\W				匹配任意不是字母,数字,下划线,汉字的字符
\S				匹配任意不是空白符的字符
\D				匹配任意非数字的字符
\B				匹配不是单词开头或结束的位置
[^x]			匹配除了x以外的任意字符
[^aeiou]		匹配除了aeiou这几个字母以外的任意字符

(exp)			匹配exp,并捕获文本到自动命名的组里
(?<name>exp)	  匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)			匹配exp,不捕获匹配的文本,也不给此分组分配组号
(?=exp)			匹配exp前面的位置(零宽断言)
(?<=exp)		   匹配exp后面的位置
(?!exp)			匹配后面跟的不是exp的位置
(?<!exp)		   匹配前面不是exp的位置
(?#comment)		这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

文件及目录匹配,其中:

-f 和 !-f		用来判断是否存在文件
-d 和 !-d		用来判断是否存在目录
-e 和 !-e		用来判断是否存在文件或目录
-x 和 !-x		用来判断文件是否可执行
^~			标识符后面跟一个字符串。

Nginx将在这个字符串匹配后停止进行正则表达式的匹配(location指令中正则表达式的匹配的结果优先使用),如:location ^~ /images/,你希望对/images/这个目录进行一些特别的操作,如增加expires头,防盗链等,但是你又想把除了这个目录的图片外的所有图片只进行增加expires头的操作,这个操作可能会用到另外一个location,例如:location ~* \.(gif|jpg|jpeg)$,这样,如果有请求/images/1.jpg,nginx如何决定去进行哪个location中的操作呢?结果取决于标识符^~,如果你这样写:location /images/,这样nginx会将1.jpg匹配到location ~* \.(gif|jpg|jpeg)$这个location中,这并不是你需要的结果,而增加了^~这个标识符后,它在匹配了/images/这个字符串后就停止搜索其它带正则的location。

=

表示精确的查找地址,如location = /它只会匹配uri为/的请求,如果请求为/index.html,将查找另外的location,而不会匹配这个,当然可以写两个location,location = /和location /,这样/index.html将匹配到后者,如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。

@

表示为一个location进行命名,即自定义一个location,这个location不能被外界所访问,只能用于Nginx产生的子请求,主要为error_page和try_files。

flag标记有:

last			相当于Apache里的[L]标记,表示完成rewrite
break			终止匹配, 不再匹配后面的规则
redirect		返回302临时重定向 地址栏会显示跳转后的地址
permanent		返回301永久重定向 地址栏会显示跳转后的地址
$args				此变量与请求行中的参数相等
$content_length		等于请求行的“Content_Length”的值。
$content_type		等同与请求头部的”Content_Type”的值
$document_root		等同于当前请求的root指令指定的值
$document_uri		与$uri一样
$host				与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样
$limit_rate			允许限制的连接速率
$request_method		等同于request的method,通常是“GET”或“POST”
$remote_addr		客户端ip
$remote_port		客户端port
$remote_user		等同于用户名,由ngx_http_auth_basic_module认证
$request_filename	当前请求的文件的路径名,由root或alias和URI request组合而成
$request_body_file
$request_uri		含有参数的完整的初始URI
$query_string		与$args一样
$server_protocol	等同于request的协议,使用“HTTP/1.0”或“HTTP/1.1”
$server_addr		request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$server_name		请求到达的服务器名
$server_port		请求到达的服务器的端口号
$uri				等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index