地址重写
地址重写语法------
关于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\~\~