云计算学习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\~\~

相关推荐
油丶酸萝卜别吃5 小时前
前端转全栈学习路线
前端·学习
GlueNa2SiO39 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
weixin_4316004410 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
带娃的IT创业者10 小时前
DeepTutor:当 Agent-Native 架构撞上个性化学习的临界点
学习·架构·ai agent·大模型应用·个性化学习·教育技术·agent-native架构
xian_wwq10 小时前
【学习笔记】Context Engineering,AI Agent 真正的内存管理-4/16
笔记·学习·context
寒月小酒11 小时前
AnythingLLM 学习
学习
Benszen12 小时前
云计算基础-13:Linux网络管理实战-1
linux·运维·云计算
大模型码小白14 小时前
【AI】一文讲清 RAG:从大模型局限到企业级知识库落地流程
人工智能·深度学习·学习
AI探索先锋15 小时前
A* 路径规划:四种算法的进化史-学习
学习·算法
辣知15 小时前
辣知·化智20 九千年文明记录
学习