rewrite规则
实现url重写以及重定向
场景
Url访问跳转,支持开发设计
页面添砖、兼容性支持、展示效果等
SEO优化
维护
后台维护、流量转发等
安全
配置语法
rewrite
语法
rewrite regex replacement [flag]
默认
---
作用域
server,location,if
例如
将网站所有请求全部重定向一个页面 rewrite ^(.*)$ /page/maintain.html break
正则表达式
正则表达式
.
匹配除换行符以外等任意字符
?
重复0次或1次
+
重复1次或更多次
*
匹配前面的子表达式零次或多次
\d
匹配数字
^
匹配字符串的开始
$
匹配字符串的结尾
{n}
重复n次
{n,}
重复n次或更多次
[c]
匹配单个字符串c
[a-z]
匹配a-z小写字母的任意一个
\
转移字符
( )
用于匹配括号之间的内容,通过$1、$2调用
例子:
...
if($http_user_agebt ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
...
pcretest
pcretest是一个正则表达式测试工具
例子:
$ pcretest #回车
PCRE version 8.36 2014-09-29 #这个是命令行显示的pcre版本
re> /(\d+)\.(\d+)\.(\d+)\.(\d+)/ #输入所要匹配的正则 然后回车
data> 192.168.10.10
0: 192.168.10.10
1: 192
2: 168
3: 10
4: 10
flag
flag
备注
last
停止rewrite检测
last停止后重新创建一个请求,然后跳转
break
停止rewrite检测
break直接寻找重写后的文件
redirect
返回302临时重定向,地址栏会显示跳转后的地址
permanent
返回301永久重定向,地址栏会显示跳转后的地址
例子:
...
root /www/nginx/code/
location ~ ^/break {
# 这个匹配到了以后 会往 /www/nginx/code/test/ 下寻找有没有 并停止
rewrite ^/break /test/ break;
}
location ~ ^/last {
# 这个匹配到了以后会重新发起一次请求 访问 uri/test/
rewrite ^/last /test/ last;
}
location /test/ {
default_type application/json;
return 200 '{"status":"success"}'
}
...
# 访问 kingofzihua.top/break 会返回403
# kingofzihua.top 是我配置的虚拟域名
# 返回403是因为我 并没有/www/nginx/code/test/ 这个目录
# 访问 kingofzihua.top/last 会返回{"status":"success"};
# 因为它重新发起了一次请求 kingofzihua.top/test/
location /course {
root /www/nginx;
# 访问 /coutse-01-02-03.html 转化为 /coutse/01/02/coutse_03.html
rewrite ^/coutse-(\d+)-(\d+)-(\d+)\.html$ /course/$1/$2/course_$3.html break;
# 判断如果是Chrome浏览器就跳转到百度
if ($http_user_agent ~* Chrome) {
# 如果访问的匹配到nginx 就跳转到百度搜索nginx
rewrite ^/nginx https://www.baidu.com/s?wd=nginx;
}
# 判断如果不是一个目录
if (!-f $request_filename ) {
# /index 重写为index.php?s=/index
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
...
Rewrite规则优先级
执行server块的rewrite指令
执行location匹配
执行选定的location中的rewrite
Last updated