nginx-Rewrite

1365人浏览 / 0人评论

一、什么是rewrite

rewrite主要实现url地址重写,以及重定 向,就是 把传入web的请 求重 定向到其他URL的过程。

使用场景: 

1.地址跳转,用户访问www.oldboyedu.com/sz这个URL时,将其定向 至一个新的域名sz.liangzeyu.com

2.协议跳转,用户通过http协议请求网站时,将其重新跳转至https协议方 式

2.伪静态,将动态页面显示为静态页面方式的一种技术, 便于搜索引擎的录入, 同时减少动态URL地址对外暴露过多的参数, 提升更高的安全性。

3.搜索引擎,SEO优化依赖于url路径, 好记的url便于支持搜索引擎录入

二、rewrite标记Flag

last   本条规则匹配完成后,停止匹配,不在匹配后面的规则
break  本条规则匹配完成后,停止匹配,不在匹配后面的规则
redirect  返回302临时重定向, 地址栏会显示跳转后的地址
permanent   返回301永久重定向, 地址栏会显示跳转后的地址

 三、rewrite使用实例

location /abc {
rewrite (.*) /ccc/bbb/2.html redirect;
#return 302 /ccc/bbb/2.html;
}
location ~ ^/bgx {
rewrite ^(.*)$ https://www.liangzeyu redirect;
rewrite ^(.*)$ https://www.liangzeyu.com permanent;
#return 301 http://liangzeyu.com;
#return 302 http://liangzeyu.com;
}
location /2018 {
rewrite ^/2018/(.*)$ /2014/$1 redirect;
}
location /test {
rewrite (.*) http://www.liangzeyu.com redirect;
}
location / {
#灵活
rewrite ^/course-(.*)-(.*)-(.*).html$ /course/$1/$2/$3/course_$3.html
redirect;
#固定
#rewrite ^/course-(.*) /course/11/22/33/course_33.html redirect;
}
rewrite ^(.*) https://$server_name$1 redirect;
#return 302 https://$server_name$request_uri;

补充

1.Rewrite优先级
1.先执行server块的rewrite指令
2.其次执行location匹配规则
3.最后执行location中的rewrite
2.Rewrite常用变量,在匹配过程中可以引用一些Nginx的全局变量
$document_root 针对当前请求的根路径设置值;
$host 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$request_filename 当前请求的文件路径名(带网站的主目录/code/images/test.jpg
$request_uri 当前请求的文件路径名(不带网站的主目录/images/test.jpg
$scheme用的协议,比如http或者https
3.如何优雅的书写Rewrite规则
server {
listen 80;
server_name www.liangzeyu.com liangzeyu.com;
if ($http_host = nginx.org){
rewrite (.*) http://www.nginx.org$1;
}
}
server {
listen 80;
server_name oldboy.com;
rewrite ^ http://www.oldboy.com$request_uri;
}

ip封 

server {
listen 80;
server_name bgx.com;
location / {
set $allow true;
if ($http_x_forwarded_for ~ "106.121.*.*|106.121.71.120|106.121.74.130"){
set $allow false;
}
if ($allow = false){ return 403;
}
}
}

 

限制访问后台

listen 80;
server_name bgx.com;
location ~ ^/admin {
set $allow false;
if ($http_x_forwarded_for ~ "36.11.10.254|36.11.10.*"){
set $allow true;
}
if ($allow = false){
return 403;
}
}
}

 

全部评论