Nginx的rewrite
理论支持
Rewrite跳转场景
URL看起来更规范、合理
企业会将动态URL地址伪装成静态地址提供服务
网址换新域名后,让旧的访问跳转到新的域名上
服务端某些业务调整
Rewrite实际场景
Nginx跳转需求的实现方式
使用rewrite进行匹配跳转
使用if匹配全局变量后跳转
使用location匹配再跳转
rewrite放在server{ },if{ },location{ }段中
location只对域名后边的除去传递参数外的字符串起作用
对域名或参数字符串
使用if全局变量匹配
使用proxy_pass反向代理
Nginx正则表达式
Rewrite命令
Rewrite命令语法
rewrite <正则> <跳转后的访问> [flag]
flag标记说明
last和break的区别
last一般写在server和if中,不终止重写后的url匹配;
break一般使用在location中,终止重写后的url匹配;
location分类
按优先级排序:
精确匹配
前缀匹配
正则匹配
普通匹配
通用匹配
rewrite和location
相同点
都能实现跳转
不同点
rewrite是在同一域名内更改获取资源的路径
location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器
rewrite会写在location里,执行顺序
执行server块里面的rewrite指令
执行location匹配
执行选定的location中的rewrite指令
实例
基于域名
1.vim /etc/nginx.conf
server {
server_name www. mcc. com;
if ($host = ’ www. mcc.com’)
{
rewrite ^/(.*)$ http: //www.mcc2.com/$1 permanent
}
}
2.添加新域名www.mcc2.com的站点位置
server {
listen 80;
server_name www. mcc2.com;
charset utf-8;
access_log /var/log/nginx/www. newdomain. com-access. Log main;
location / {
root /usr/ share/nginx/html;
index index. html index.htm;
}
3.mkdir /var/log/nginx
4.mkdir –p /usr/share/nginx/html
echo “this is a test web” > /usr/share/nginx/html/index.html
5.重启nginx
systemctl restart nginx
6. vim /etc/hosts
192.168.17.10 www.mcc.com www.mcc2.com
效果图
在浏览器输入的域名为mcc,自动跳转至mcc2
基于客户端IP
1. vim /etc/nginx.conf
server {
listen 80;
server_name www.mcc.com;
set $rewrite true;
if ($remote_addr = "192.168.17.10") {
set $rewrite false;
}
if ($rewrite = true) {
rewrite (.+) /maintenance.html;
}
location = /maintenance.html {
root /usr/share/nginx/html;
}
2. 建网页
vim /usr/share/nginx/html/maintenance.html
效果图
在本机访问则显示首页;其他机器访问则显示正在维护
基于参数匹配跳转
vim /etc/nginx.conf
server {
listen 80;
server_name www.mcc.com;
charset utf-8;
if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
rewrite (.*) http://www.mcc.com permanent;
}
效果图
基于目录下所有php文件的跳转
server {
listen 80;
server_name www.mcc.com;
charset utf-8;
location ~* /upload/.*\.php$ {
rewrite (.+) http://www.mcc.com permanent;
}
效果图
基于普通url请求的跳转
server {
listen 80;
server_name www.mcc.com;
charset utf-8;
location ~* ^/1/test.html {
rewrite (.+) http://www.mcc.com permanent;
}
效果图
基于旧 新域名并加目录
vim /etc/nginx.conf
server {
listen 80;
server_name bbs.mcc.com;
charset utf-8;
access_log /var/log/nginx/bbs.mcc.com-access.log main;
location /post {
rewrite (.+) http://www.mcc.com/bbs$1 permanent;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
2. 创建bbs目录
cd /usr/local/nginx/html
mkdir –p /bbs/post
cd /bbs/post
vim 1.html
11111111
3. 键映射
vim /etc/hosts
192.168.17.10 www.mcc.com bbs.mcc.com
效果图