rewrite规则
NGINX 中 rewrite最后的标记含义:
flag标记有:
last 相当于Apache里的[L]标记,表示完成rewrite,匹配完,再向下匹配。地址栏会显示跳转后的地址
break 终止匹配, 不再匹配后面的rewrite规则,地址栏会显示跳转后的地址
redirect 返回302临时重定向,地址栏会显示跳转后的URL
permanent 返回301永久重定向,无论是301跳转还是302跳转地址栏都会显示跳转后的URL
DNSPOD中显性URL 和 隐形URL区别 :
1. 显性URL:访问 aa 能看到地址栏显示bb,同时页面发生改变。
2. 隐形URL:访问 aa 地址栏还是显示aa,同时页面发生改变。
如果想实现访问www.aaa.com 跳转后还是www.aaa.com 同时页面展示的是www.bbb.com可以通过反向代理实现,或通过DNSPOD实现
1、rewrite配置
(1) 访问 bbs.etiantian.org或bbs.etiantian.org/(.*) 跳转到 www.baidu.com
[root@WEB extra]# cat bbs.conf
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/www;
index index.html;
}
rewrite ^/ http://www.baidu.com/ permanent;
}
解释:
当匹配www.etiantian.org 或 www.etiantian.org/(.*)时,则跳转到www.baidu.com
(2) 访问 bbs.etiantian.org或bbs.etiantian.org/(.*) 跳转到 www.baidu.com/bbs/
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/www;
index index.html;
}
rewrite ^/ http://www.baidu.com/bbs/ permanent;
}
当匹配www.etiantian.org 或 www.etiantian.org 下的任意内容时,则跳转到 www.baidu.com/bbs/
(3) 访问 bbs.etiantian.org/bbs/或 bbs.etiantian.org/bbs/(.*) 跳转到 www.baidu.com/bbs/
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/www;
index index.html;
}
rewrite ^/bbs http://www.baidu.com/bbs/ permanent;
}
当访问 bbs.etiantian.org/bbs 或 bbs.etiantian.org/bbs/ 或 bbs.etiantian.org/bbs/(.*) 跳转到 www.baidu.com/bbs/
(4) 访问 bbs.etiantian.org/bbs/(.*) 跳转到 bbs.etiantian.org/www/(.*)
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/www;
index index.html;
}
rewrite ^/bbs/(.*) http://bbs.etiantian.org/www/$1 permanent;
if ($host = 'www.playyx.com') {
rewrite ^/games/zwx/ http://www.playyx.com/games/blryy/ permanent;
}
}
如果匹配主机头www.playyx.com, 那么当访问www.playyx.com/games/zwx 跳转到 www.playyx.com/games/blryy/
$1=(.*)
访问 bbs.etiantian.org/bbs/下的任意内容,跳转到 bbs.etiantian.org/www/下的任意内容
$1=第一个(.*)
$2=第二个(.*)
(5) 访问bbs.etiantian.org/下的任意内容时, 跳转到 www.baidu.com/下的任意内容
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/www;
index index.html;
}
rewrite ^/(.*) http://www.baidu.com/$1 permanent;
}
^/(.*) //bbs.etiantian.org/下的任意内容
http://www.baidu.com/$1 //www.baidu.com/下的任意内容, $1=(.*)
解释:
当访问 bbs.etiantian.org/(.*) 跳转到 www.baidu.com/(.*)
(6) 访问bbs.etiantian.org/bbs 跳转到 www.etiantian.org/abc
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/www;
index index.html;
}
rewrite ^/(.*) http://www.etiantian.org/abc/$1 permanent;
}
解释:
当匹配 bbs.etiantian.org下的任意内容时,则访问 www.etiantian.org/bbs/ 下的任意内容
(7) 访问:bbs.etiantian.org/download/(.*)/media/(.*) 时,跳转到:www.etiantian.org/(.*)/mp3/(.*).mp3
[root@web-31 extra]# cat www.conf
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/www;
index index.html;
}
rewrite ^/download/(.*)/media/(.*)$ http://www.etiantian.org/$1/mp3/$2.mp3 last;
}
解释:
当访问:bbs.etiantian.org/download/(.*)/media/(.*) 时,跳转到:www.etiantian.org/(.*)/mp3/(.*).mp3
$1=(/download/.*)=test1
$2=(.*)=test2
(8)nginx上配有aaa.example.com的虚拟主机,现在需要将访问http://aaa.example.com/api/x.x/client/的请求转到http://bbb.example.com:8001/api/x.x/client/,bbb.example.com的虚拟主机在另外一台nginx上,其中x.x表示位数不定的版本号,如:1.0或1.20.345都可能。请求转过去要求url保持不变
server {
listen 80;
server_name aaa.example.com;
location / {
root /alidata/www/static;
index index.html;
}
rewrite ^/api/(.*)/client/(.*)$ http://bbb.example.com:8001/api/$1/client/$2 permanent;
}
2、某公司线上配置rewrite
(1) nginx主配置文件
# cat /alidata/nginx/conf.d/upstream.conf
#反向代理地址池
upstream playyx_com {
server 10.1.10.10:81;
}
server
{
listen 80;
server_name ht.playyx.com xl.playyx.com www.rocen.com.cn;
location / {
include /alidata/nginx/conf.d/go2eu/tupian.conf; #跳转到rewrite配置文件
proxy_pass http://playyx_com; #反向代理指向地址池
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host; # $host表示主机头,也就是被访问域名
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(cvs|svn|git|hg|bzr|sql|phar|tpl|sh|log)$ {
deny all;
}
location ~* /\.svn/ {
deny all;
}
}