nginx rewrite URL重写模块配置及信息详解

校睿宝培训机构ERP,学员课时管理软件
实验预约管理软件,实验室管理软件,大学、高校实验预约平台
网站日志分析软件,网站访问日志在线分析
哲涛服务器监控软件,IT运维管理软件,CPU、内存、磁盘监控软件

nginx rewrite 官方说明

ngx_http_rewrite_module模块用于使用PCRE正则表达式更改请求URI,返回重定向并有条件地选择配置。

break,if,return,rewrite和set指令按以下顺序处理:

在服务器级上指定的该模块的指令是按顺序执行的;
重复过程:
基于请求URI来搜索位置;
在找到的位置内指定的该模块的指令是按顺序执行;
如果请求URI被重写,则重复循环但不超过10次。

nginx rewrite模块具有以下主要指令:


break
if
return
rewrite
rewrite_log
set

官方说明见: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html 

rewrite 指令(rewrite配置)

配置位置:rewrite指令可以在location、server、if上下文中使用。

语法:rewrite regex replacement [flag];

regex:符合PCRE规范的正则表达式。

replacement:改写后的URL。

[flag]:可选标记。

last - 最后一个规则
停止处理当前的ngx_http_rewrite_module指令集并开始搜索匹配更改的URI的新位置;
break - 终止
与break指令一样停止处理当前的ngx_http_rewrite_module指令集;
redirect - 302临时重定向
返回302代码的临时重定向; 在替换字符串不以“http://”,“https://”或“$ scheme”开头时使用;
permanent - 永久重定向
返回301代码的永久重定向。

rewrite举例

server {
    ...
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
    ...
}

rewrite 基础正则表达式介绍


. : 匹配除换行符以外的任意字符

? : 重复0次或1次

+ : 重复1次或更多次

* : 重复0次或更多次

\d :匹配数字

^ : 匹配字符串的开始

$ : 匹配字符串的介绍

{n} : 重复n次

{n,} : 重复n次或更多次

[c] : 匹配单个字符c

[a-z] : 匹配a-z小写字母的任意一个

小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。

运算符号、比较方法(if/location)

一个变量名;false如果这个变量是空字符串或者以0开始的字符串;

使用= ,!= 比较的一个变量和字符串,true/false

使用~, ~*与正则表达式匹配的变量,如果这个正则表达式中包含右花括号}或者分号;则必须给整个正则表达式加引号

使用-f ,!-f 检查一个文件是否存在

使用-d, !-d 检查一个目录是否存在

使用-e ,!-e 检查一个文件、目录、符号链接是否存在

使用-x , !-x 检查一个文件是否可执行

可在配置中使用的常见变量


$args : #这个变量等于请求行中的参数,同$query_string

$content_length : 请求头中的Content-length字段。

$content_type : 请求头中的Content-Type字段。

$document_root : 当前请求在root指令中指定的值。

$host : 请求主机头字段,否则为服务器名称。

$http_user_agent : 客户端agent信息

$http_cookie : 客户端cookie信息

$limit_rate : 这个变量可以限制连接速率。

$request_method : 客户端请求的动作,通常为GET或POST。

$remote_addr : 客户端的IP地址。

$remote_port : 客户端的端口。

$remote_user : 已经经过Auth Basic Module验证的用户名。

$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。

$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相同。

 

校睿宝培训机构ERP,学员课时管理软件
实验预约管理软件,实验室管理软件,大学、高校实验预约平台
网站日志分析软件,网站访问日志在线分析
哲涛服务器监控软件,IT运维管理软件,CPU、内存、磁盘监控软件

上海哲涛网络科技有限公司版权所有 © 2005-2023       沪ICP备06058430号-1

沪公网安备 31011302000898号

点我咨询