Nginx的rewrite地址重写

简介: Nginx的rewrite地址重写

一、Rewrite基本概述


  • Rewrite的作用:主要实现URL地址重写,以及地址重定向
  • Rewrite的使用场景:



  1. URL访问跳转:支持开发设计,页面跳转,兼容性支持,展示效果
  2. SEO优化:依赖于URL路径,以便于支持搜索引擎录入
  3. 维护:后台维护,流量转发等
  4. 安全:伪静态


Rewrite配置语法:


语法: rewrite regex replacement [flag];


可配置区域: server、location、if


例如:把所有请求都转发给/aaa/bbb.html


rewrite ^(.*)$ /aaa/bbb.html break;


二、Rewrite标记,Flag


(1)flag类型


Flag 意义
last 如果跳转的资源没有,那么就往下面的location需找资源,如果有就跳转,没有就停止跳转
break 如果跳转的资源没有,那么会直接停止跳转
redirect 返回302临时重定向,地址栏会显示跳转后的地址,只会在Nginx开启的时候生效
permanent 返回301永久重定向,地址栏会显示跳转后的地址,Nginx关闭后也会生效


(2)对于Flag中的break和last


-实验环境


系统 主机名 ip地址 nginx版本
Cetnos7.4 rzy 192.168.100.202 Nginx-1.18.0


-实验步骤

******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname rzy
[root@Centos7 ~]# su
[root@rzy ~]# systemctl stop firewalld
[root@rzy ~]# setenforce 0
setenforce: SELinux is disabled
[root@rzy ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
******(2)上传Nginx源码包,进行安装
[root@rzy ~]# yum -y install zlib-devel pcre-devel
。。。。。。
完毕!
[root@rzy ~]# ll
总用量 1020
-rw-------. 1 root root    1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 1039530 4月  19 10:03 nginx-1.18.0.tar.gz
[root@rzy ~]# tar xf nginx-1.18.0.tar.gz  -C /usr/src/
[root@rzy ~]# cd /usr/src/nginx-1.18.0/
[root@rzy nginx-1.18.0]# useradd -M -s /sbin/nologin nginx
[root@rzy nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install 
[root@rzy nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/
[root@rzy nginx-1.18.0]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@rzy nginx-1.18.0]# cd /usr/local/nginx/conf/
[root@rzy conf]# cp nginx.conf nginx.conf.bak
[root@rzy conf]# sed -i '/#/d' nginx.conf
[root@rzy conf]# sed -i '/^$/d' nginx.conf
******(3)修改配置文件
[root@rzy conf]# vim nginx.conf
  1 worker_processes  1;
  2 events {
  3     worker_connections  1024;
  4 }
  5 http {
  6     include       mime.types;
  7     default_type  application/octet-stream;
  8     sendfile        on;
  9     keepalive_timeout  65;
 10     server {
 11         listen       80;
 12         server_name  localhost;
 13         root /aaa/bbb;  #网页目录
 14         location ~ ^/break {  #匹配break资源
 15             rewrite ^/break /ccc/ break; #跳转到/ccc/
 16         }
 17         location ~ ^/last { #匹配last资源
 18             rewrite ^/last /ccc/ last; #跳转到/ccc/
 19         }
 20         location ~ /ccc/ { #匹配/ccc/资源
 21             default_type application/json;
 22             return 200 '{"status":"success"}'; #返回200状态码,内容是{"status":"success"}的页面
 23         }
 24      
 25     }
 26 }
[root@rzy conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@rzy conf]# systemctl start nginx

使用浏览器进行访问

2021051918122173.png


分别访问这三个location,发现break直接报错,而last和/ccc/可以访问成功,这就是因为在指定的网页目录找不到指定资源的情况下,break会直接停止跳转从而报错404找不到页面,而last会继续往下寻找跳转的资源,所以last可以访问成功


20210519181236531.png

(2)对比Flag中的redirect和permanent


-实验环境


系统 主机名 ip地址 nginx版本
Cetnos7.4 rzy 192.168.100.202 Nginx-1.18.0


两个类型都可以进行跳转,都是last的检测方式,即找不到资源就往下一个location寻找


-实验步骤

******(1)继续上面的实验,修改配置文件
[root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf
  1 worker_processes  1;
  2 events {
  3     worker_connections  1024;
  4 }
  5 http {
  6     include       mime.types;
  7     default_type  application/octet-stream;
  8     sendfile        on;
  9     keepalive_timeout  65;
 10     server {
 11         listen       80;
 12         server_name  localhost;
 13         root /aaa/bbb;
 14         location ~ ^/aaa {
 15             rewrite ^/aaa /ccc/ redirect;
 16         }
 17         location ~ ^/bbb{
 18             rewrite ^/bbb /ccc/ permanent;
 19         }
 20         location ~ /ccc/ {
 21             default_type application/json;
 22             return 200 '{"status":"success"}';
 23         }
 24 
 25     }
 26 }
[root@rzy ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@rzy ~]# systemctl restart nginx

在Nginx开启的时候,两种类型都可以进行重定向


20210519181252553.png

关闭Nginx,再次进行访问


2021051918131053.png


访问aaa无法跳转,访问bbb可以跳转到ccc

目录
相关文章
|
5月前
|
应用服务中间件 nginx Perl
Nginx系列教程(09) - rewrite
Nginx系列教程(09) - rewrite
60 0
|
8月前
|
应用服务中间件 nginx
Nginx rewrite(URL)地址重定向
Nginx rewrite(URL)地址重定向
326 0
|
前端开发 应用服务中间件 nginx
nginx中配置不输入端口(指定地址)访问项目的方法
nginx中配置不输入端口(指定地址)访问项目的方法
379 0
|
1月前
|
前端开发 应用服务中间件 nginx
nginx中配置不输入端口(指定地址)访问项目的方法
nginx中配置不输入端口(指定地址)访问项目的方法
27 0
|
5月前
|
应用服务中间件 Apache nginx
nginx做反向代理导致request.getServerName()获取不到代理地址的问题
nginx做反向代理导致request.getServerName()获取不到代理地址的问题
|
7月前
|
前端开发 应用服务中间件 PHP
nginx之rewrite
nginx之rewrite
46 0
|
10月前
|
应用服务中间件 PHP nginx
一次NGINX rewrite重定向403错误排除
一次NGINX rewrite重定向403错误排除
|
缓存 应用服务中间件 PHP
Nginx及rewrite跳转(二)
Nginx及rewrite跳转(二)
Nginx及rewrite跳转(二)
|
缓存 搜索推荐 应用服务中间件
|
应用服务中间件 nginx