nginx的rewrite地址重写功能和案例介绍

本文详细介绍了Nginx中的地址重写功能,包括其作用、与地址转发的区别、重写语法以及实际配置示例,如错误页面处理、目录别名和域名跳转等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.定义

二.作用

1.调整用户浏览的url,模板更规范

2.提升搜索引擎网站给予用户的体验,可以将动态的url伪装成静态地址提供服务

3.在网站更换新域名后,可以通过旧域名访问到新域名

4.便于根据特殊变量1、客户信息进行url调整

三.区分地址重写和转发

1.地址重写和地址转发

2.地址转发时只会有一次网络访问请求,重写一般会有两次

3.地址转发发生在同一站点的不同项目之间,地址重写没有这个限制

4.地址重写的页面的路径需要完整路径,转发则不需要

5.地址转发可以将客户请求的数据属性传递到新的界面,而地址重写不可以,仅仅是将页面定向到服务器选定的地址

6.地址重写的速度比转发慢

四.rewrite的语法规则

1.格式

2.几个flag标记符号介绍

五.例子

1.访问不存在的网页时定向到某个界面

(1)使用if+rewrite

(2)使用try_files

2.为某个目录定义别名,用户访问的路径其实并不存在,而是将其转发到另外一个页面

(1)创建bbb目录存放index.html文件

(2)编辑nginx.conf文件

3.实现域名跳转

访问80端口域名跳转到195主机的域名


 

一.定义

web服务器中的必备功能,用来实现地址的重写(不是转发),可以让用户在我们网站变动的时候仍然能够通过原来的书签访问到变动后的内容。

二.作用

1.调整用户浏览的url,模板更规范

2.提升搜索引擎网站给予用户的体验,可以将动态的url伪装成静态地址提供服务

3.在网站更换新域名后,可以通过旧域名访问到新域名

4.便于根据特殊变量1、客户信息进行url调整

三.区分地址重写和转发

1.地址重写和地址转发

地址重写是地址标准化的过程,即使服务器接受了来自用户输入的不同的域名,但服务器再此之中选择确定的一个,那么客户端浏览器中的地址会改变为服务器选定的地址;而地址转发是数据传输分别到达不同的路由器服务器设备,是一个域名指向一个站点的过程,在地址转发的过程中,浏览器中的地址是不变的。

2.地址转发时只会有一次网络访问请求,重写一般会有两次

3.地址转发发生在同一站点的不同项目之间,地址重写没有这个限制

4.地址重写的页面的路径需要完整路径,转发则不需要

5.地址转发可以将客户请求的数据属性传递到新的界面,而地址重写不可以,仅仅是将页面定向到服务器选定的地址

6.地址重写的速度比转发慢

四.rewrite的语法规则

1.格式

可以应用在server、location、if等

rewrite regex replacement [flag];
#表示根据regex正则表达式匹配成功后跳转到replacement

2.几个flag标记符号介绍

last——本条规则匹配完成后, 继续向下匹配新其他uri规则

break——本条规则匹配完成即终止, 不再匹配后面的任何规则

redirect——返回 302 临时重定向, 浏览器地址栏会显示跳转后的url地址

permanent——返回 301 永久重定向, 浏览器地址栏会显示跳转后的url地址

五.例子

1.访问不存在的网页时定向到某个界面

(1)使用if+rewrite

server {
                listen 80;
                server_name www.aabb.com;
                error_log /usr/local/src/nginx-1.22.0/logs/error.log;
                access_log /usr/local/src/nginx-1.22.0/logs/access.log;
                location / { 
                        root /usr/local/src/nginx-1.22.0/html/ip;  #这个目录里不要存在index.html文件
                        index index.html index.htm;
                        if (!-f $request_filename) {
                                rewrite /. /err.html permanent; #这个err.html要放在上面那个html/ip目录里
                        }
                }

(2)使用try_files

server {
                listen 80;
                server_name www.aabb.com;

                root /usr/local/src/nginx-1.22.0/html/ip;
                index index.html index.htm;
         
                location / {
                        try_files $uri $uri/ =404;
                }

                location = /err.html {
                        root /usr/local/src/nginx-1.22.0/html/ip;
                }
                error_page 404 /err.html;
        }

68d5f1fb3bd64fc2b1913cf9809f5996.png

2.为某个目录定义别名,用户访问的路径其实并不存在,而是将其转发到另外一个页面

(1)创建bbb目录存放index.html文件

[root@localhost ip]# pwd
/usr/local/src/nginx-1.22.0/html/ip
[root@localhost ip]# ll
total 4
drwxr-xr-x 2 root root 24 Aug 11 12:54 bbb
-rwxrwxrwx 1 root root  6 Aug 11 11:39 err.html
[root@localhost ip]# cat bbb/index.html 
bbb

(2)编辑nginx.conf文件

server {
                listen 80;
                server_name www.aabb.com;
                error_log /usr/local/src/nginx-1.22.0/logs/error.log;
                access_log /usr/local/src/nginx-1.22.0/logs/access.log;
                location / { 
                        root /usr/local/src/nginx-1.22.0/html/ip;
                        index index.html index.htm;
                        rewrite ^/aaa/(.*) /bbb/$1 last;  #aaa目录实际上不存在,在访问aaa时跳转访问bbb目录的内容
                }

        }    

41018656f2914d0284f30ed1e9754dc0.png

3.实现域名跳转

访问80端口域名跳转到195主机的域名

server {
                listen 80;
                server_name www.aabb.com;
                rewrite ^/.* http://www.llss.com/$1 last;
                error_log /usr/local/src/nginx-1.22.0/logs/error.log;
                access_log /usr/local/src/nginx-1.22.0/logs/access.log;
                location / { 
                        root /usr/local/src/nginx-1.22.0/html/ip;
                        index index.html index.htm;
                }

        }    
        server { 
                listen 192.168.2.195;
                server_name www.llss.com;
                location / { 
                        root /usr/local/src/nginx-1.22.0/html/ip;
                        index index1.html index.htm;
                }
        }

c4f9e36de883432a84460e71a1fdde42.png

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树下一少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值