云计算学习100天-第26天

地址重写

地址重写语法------

关于Nginx服务器的地址重写,主要用到的配置参数是rewrite

语法格式:

rewrite regex replacement flag

rewrite 旧地址 新地址 选项

地址重写步骤:

#修改配置文件(访问a.html重定向到b.html)

cd /usr/local/nginx/

cp conf/nginx.conf.default conf/nginx.conf #还原配置文件

cp: overwrite 'conf/nginx.conf'? y

root@proxy nginx# vim /usr/local/nginx/conf/nginx.conf

.. ..

server {

listen 80;

server_name localhost;

rewrite /a.html /b.html; #新添加地址重写,a.html重定向到b.html

...

location / {

root html;

index index.html index.htm;

}

}

echo "nginx-B~~" > /usr/local/nginx/html/b.html

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

#客户端测试

http://192.168.88.5/a.html #内容显示的是nginx-B~~,但是地址栏没有发生变化,还是a.html页面

此时配置文件中直接写rewrite /a.html /b.html; 配置,在测试是其实会有些问题,比如在浏览器中访问时把192.168.88.5/a.html写成192.168.88.5/a.htmldc 或者写成 192.168.88.5/dc/a.html,访问都会正常显示b.html的页面,这是因为此时写的是只要包含a.html的都会跳转,没有进行精准匹配,可以进行以下修改,只有写a.html时才会正确跳转

vim /usr/local/nginx/conf/nginx.conf

.. ..

server {

listen 80;

server_name localhost;

rewrite ^/a\.html$ /b.html; #新添加地址重写,a.html重定向到b.html

...

/usr/local/nginx/sbin/nginx -s reload

浏览器重新访问测试即可192.168.88.5/a.html,显示b.html页面内容

测试重定向------

#redirect 临时重定向,状态码302

#permanent 永久重定向,状态码301

#修改Nginx服务配置

vim /usr/local/nginx/conf/nginx.conf

.. ..

server {

listen 80;

server_name localhost;

rewrite ^/a\.html$ /b.html redirect; #新修改,redirect重定向,测试完之后把redirect换成permanent,是一样的效果

...

location / {

root html;

index index.html index.htm;

}

}

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

浏览器测试,地址栏同时发生变化

http://192.168.88.5/a.html #内容显示的是nginx-B~~,地址栏发生变化,是b.html页面

不同网站间跳转------

#修改Nginx服务配置实现访问192.168.88.5的请求重定向至www.tmooc.cn

vim /usr/local/nginx/conf/nginx.conf

.. ..

server {

listen 80;

server_name localhost;

rewrite / http://www.tmooc.cn/; #新修改,访问旧网站的任意内容都跳转到新网站

location / {

root html;

index index.html index.htm;

}

}

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

#客户端测试

http://192.168.88.5 #可以成功跳转

子页面重定向------

#修改配置文件(访问192.168.88.5/下面子页面,重定向至www.tmooc.cn/下相同的子页面)

vim /usr/local/nginx/conf/nginx.conf

...

server {

listen 80;

server_name localhost;

rewrite /(.*) http://www.tmooc.cn/$1; #新修改

location / {

root html;

index index.html index.htm;

}

}

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

#客户端测试

http://192.168.88.5/b.html #成功跳转

实现不同浏览器跳转到不同页面------

#创建网页目录以及对应的页面文件:

mkdir html/firefox

echo firefox~~ > html/firefox/abc.html #火狐专用页面

cho others~~ > html/abc.html #其他浏览器专用页面

火狐访问192.168.88.5/abc.html时可以看到html/firefox/abc.html里面内容

其他浏览器访问192.168.88.5/abc.html时可以看到html/abc.html里面内容

#修改Nginx服务配置

vim /usr/local/nginx/conf/nginx.conf

.. ..

server {

listen 80;

server_name localhost;

if ($http_user_agent ~* firefox) { #如果用户使用了火狐浏览器就进行地址重写,让用户看到火狐专用页面,否则就是其他页面

rewrite /(.*) /firefox/1; #http_user_agent是nginx的内置变量,包含了发起 HTTP 请求的客户端的用户代理(User-Agent)字符串,比如用的什么浏览器

}

location / {

root html;

index index.html index.htm;

}

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

#客户端测试

用火狐浏览器与其他浏览器访问相同地址192.168.88.5/abc.html,可以得到不同结果

火狐浏览器访问192.168.88.5/abc.html,得到结果firefox~~

其他浏览器访问192.168.88.5/abc.html,得到结果others~~

其他选项测试------

#last 不再读其他语句,但还会继续匹配其他location语句

#break 不再读其他语句,结束请求

测试last不再读其他语句

#修改Nginx服务配置

vim /usr/local/nginx/conf/nginx.conf

.. ..

server {

listen 80;

server_name localhost;

rewrite /a.html /b.html; #新修改

rewrite /b.html /c.html; #新修改

...

}

...

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

echo nginx-c~~ > html/c.html

#浏览器测试

192.168.88.5/a.html #内容显示的是nginx-c~~

#如果想要访问的是b.html的内容,可以做以下更改

vim /usr/local/nginx/conf/nginx.conf

.. ..

server {

listen 80;

server_name localhost;

rewrite /a.html /b.html last; #新修改

rewrite /b.html /c.html;

...

}

...

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

#浏览器测试访问

192.168.88.5/a.html #内容显示的是nginx-b~~

测试last会继续匹配其他location语句

vim /usr/local/nginx/conf/nginx.conf

...

location / { #此处为默认的location

rewrite /a.html /b.html last; #新添加

root html;

index index.html index.htm;

}

location /b.html { #这里是新添加的location

rewrite /b.html /c.html;

}

...

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

#客户端测试: http://192.168.88.5/a.html,显示为nginx-c\~\~

break 不再读其他语句,结束请求

vim /usr/local/nginx/conf/nginx.conf

...

location / {

rewrite /a.html /b.html break; #break可以阻止后面的语句

root html;

index index.html index.htm;

}

location /b.html {

rewrite /b.html /c.html;

}

...

#重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

#客户端测试: http://192.168.88.5/a.html,显示为nginx-b\~\~

相关推荐
xian_wwq4 小时前
【学习笔记】模型权重管理:Safetensors与私有化Hub(23/35)
笔记·学习
其实防守也摸鱼5 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
ctrl_v助手5 小时前
Halcon学习笔记2
人工智能·笔记·学习
YUS云生6 小时前
Python学习笔记·第31天:FastAPI入门——路由、路径参数、查询参数与请求体
笔记·python·学习
铅笔侠_小龙虾6 小时前
Rust 学习目录
开发语言·学习·rust
渣渣灰飞8 小时前
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第二章:RBAC 权限系统设计
android·学习·mysql
六bring个六8 小时前
open Harmony中分布式软总线的学习任务清单
分布式·学习·c/c++·open harmony
精神底层9 小时前
AI 学习笔记:研究方法的演变
人工智能·笔记·学习
依然范特东9 小时前
RAG学习总结3--检索技术
笔记·学习
白帽小阳9 小时前
[特殊字符]【2026最新】零基础入门学网络安全(详细路线图),看这篇就够了!
学习·安全·web安全·网络安全·安全运营·学习路线·web渗透