Rewrite实例
2019-09-26 本文已影响0人
UncleZ_strive
1.什么是Rewrite
实现url地址重写或url地址跳转
2.Rewrite相关模块
set设置变量
if 负责语句中的判断
return 返回返回值或url
break终止后续的rewrite规则
rewrite重定向url
-
set示例一:
将用户请求url.com.cn重新定向到url.com/zh
[root@web1 conf.d]# cat url.oldboy.com.conf
server {
listen 80;
server_name url.com.cn;
set $language zh;
rewrite ^/$ http://url.com/$language;
}
server {
listen 80;
server_name url.com;
location / {
root /data;
}
}
-
if 示例二
将用户请求url.com.jp跳转到url.com/jp
[root@web1 conf.d]# cat url.oldboy.com.conf
server {
listen 80;
server_name url.com.jp;
if ($http_host ~* cn){
set $language zh;
}
if ($http_host ~* jp){
set $language jp;
}
rewrite ^/$ http://url.com/$language;
}
server {
listen 80;
server_name url.com;
location / {
root /data;
}
}
根据用户浏览器使用的不同语言,跳转到不同的语言界面
[root@web1 conf.d]# cat language.conf
server {
listen 80;
server_name yy.com;
location / {
if ($http_accept_language ~* en){
set $language en;
}
if ($http_accept_language ~* zh){
set $language zh;
}
}
root /data/$language;
}
-
return示例三
server {
listen 80;
server_name yy.com;
location / {
if ($request_uri ~* "^/test"){
return 200 "zifuchuan";
}
if ($request_uri ~* "git"){
return 403;
}
if ($request_uri ~* "al=3526"){
return 302 "https://www.jd.com";
}
}
}
-
break示例四
server {
listen 80;
server_name url.oldxu.com;
root /code;
location / {
rewrite /1.html /2.html
break;
rewrite /2.html /3.html;
}
location /2.html {
rewrite /2.html /a.html;
}
location /3.html {
rewrite /3.html /b.html;
}
}
3.rewrite语法示例
关键字 正则 替代内容 flag标记
Syntax: rewrite regex replacement [flag];
跳转 :
重定向:
-
场景一
server {
listen 80;
server_name url.oldboy.com;
root /data;
set $language /default;
if ( $http_accept_language ~* zh ) {
set $language /zh;
}
if ( $http_accept_language ~* en ) {
set $language /en;
}
if ( $http_accept_language ~* ja ) {
set $language /jp;
}
rewrite ^/$ $language;
location / {
index index.html;
}
}
-
场景二----维护页面
永久维护
rewrite ^(.*)$ /wh.png break;
临时维护
#error_page 403 404 500 502 /wh.png;
#error_page 403 404 500 502 http://$http_host;
error_page 403 404 500 502 @temperror; 直接跳到主页
location @temperror {
rewrite ^(.*)$ https://jd.com; 跳转到京东
}
eg:
-
用户通过手机访问url.com 跳转到m.com
[root@web1 conf.d]# cat eg.conf
server {
listen 80;
server_name rurl.com;
root /data;
if ($http_user_agent ~* "android|iphone|ipad"){
rewrite ^/$ http://m.com;
}
}
第一种方法:location
[root@web1 conf.d]# cat eg.conf
server {
listen 80;
server_name rurl.com;
location / {
rewrite ^(.*)$ https://xuliangwei.com;
#return 302 https://xuliangwei.com;
}
}
第二种方法:if
[root@web1 conf.d]# cat eg.conf
server {
listen 80;
server_name rurl.com;
root /data;
if ($request_uri ~* "^/test"){
return 302 https://www.xuliangwei.com;
}
location / {
index index.html;
}
}
flag
last #本条规则匹配完成后,继续向下匹配新的location URI规则 (开发| 伪静态)
break #本条规则匹配完成即终止,不再匹配后面的任何规则 (挂维护页)
redirect #返回302临时重定向, 地址栏会显示跳转后的地址
permanent #返回301永久重定向, 地址栏会显示跳转后的地址
跳转
redirect 302 临时跳转 旧网站无影响,新网站无排名
permanent 301 永久跳转 新跳转网站有排名,旧网站排名清空
http ---> https 302 浏览器不会记住新域名
http ---> https 301 浏览器会记录新域名
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
当rewrite规则遇到break后,本location{}与其他location{}的所有rewrite或者
return规则都不再执行。
当rewrite规则遇到last后,本location{}里后续rewrite/return规则不执行,但
重写后的url再次从头开始执行所有规则,哪个匹配执行哪个。
需求: 公司网站在停机维护时,指定的IP能够正常访问,其他的IP跳转到维护页。10.0.0.1
[root@web01 conf.d]# cat s.oldboy.com.conf
server {
listen 80;
server_name s.oldboy.com;
root /data;
set $ip 0;
if ($remote_addr ~* "10.0.0.1|10.0.0.100"){
set $ip 1;
}
if ($ip = "0"){
rewrite ^(.*)/$ /wh.png break;
}
location / {
index index.html;
}
}
需求:公司网站后台/admin,只允许公司的出口公网IP可以访问,其他的IP访问全部返回500,或直接跳转至首页
server {
listen 80;
server_name s.oldboy.com;
root /code;
location /admin {
if ($remote_addr != "10.0.0.1") {
rewrite ^(.*)$ http://$http_host;
}
index index.html;
}
location / {
index index.html;
}
}