一、rewrite 语法格式及参数:
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 标记
flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URL规则。
break #本条规则匹配完成即终止,不再匹配后面的任何规则。
redircet #返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
举例:rewrite ^/(.*) http://www.baidu.com/$1 permanent;
rewrite为固定关键字。^/(.*)匹配完整的域名及后面路径。http://www.baidu.com/$1中$1取自regex()内容。permanent为flag。
关于$1,$2,只需要记住第一个括号为$1,第二个括号为$2,例如:
请求的URL:/baidu.com/user/47/dige
请求后的URL:/baidu.com/user.php?id=47&name=dige
重写规则:rewrite ^/user/([0-9]+)/(.+)$ /user.php?id=$1&name=$2;
二、location的语法规则:
location [=|~|~*|^~] /url/
= 开头表示精确匹配。
^~ 开头表示URL以某个常规字符串开头。
~ 开头表示区分大小写的正则匹配。
~* 开头表示不区分大小写的正则匹配。
!~和!~* 分别为区分大小写不匹配及不区分大小写不匹配的正则。
/ 开头通用匹配,任何请求都会匹配。
匹配优先级:= >> ^~ >> 正则 >> /
三、Nginx配置可用变量:
常用于if条件判断:
if ($flag = "01") {
return 301 https://www.xxx.cn$request_uri;
}
$args #这个变量等于请求行中的参数。
$content_length #请求头中的Content-length字段。
$content_type #请求头中的Content-Type字段。
$document_root #当前请求在root指令中指定的值。
$host #请求主机头字段,否则为服务器名称。
$http_user_agent #客户端agent信息
$http_cookie #客户端cookie信息
$limit_rate #这个变量可以限制连接速率。
$request_body_file #客户端请求主体信息的临时文件名。
$request_method #客户端请求的动作,通常为GET或POST。
$remote_addr #客户端的IP地址。
$remote_port #客户端的端口。
$remote_user #已经经过Auth Basic Module验证的用户名。
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string #与$args相同。
$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相同。