前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >015.Nginx重定向

015.Nginx重定向

作者头像
木二
发布2020-07-22 00:07:29
5.5K0
发布2020-07-22 00:07:29
举报
文章被收录于专栏:木二天空木二天空

一 重定向概述

1.1 重定向介绍

重定向(Redirect)指通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

URL重写是指通过配置conf文件,以让网站的URL中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等。当客户端浏览某个网址时,将其访问导向到另一个网址的技术。

其主要场景有如下两个:

  • 将一串很长的网址,转成较短的网址,从而实现便于传播、易于记忆。
  • 调整或更换Web服务器,网址(域名)又必须要变更(如访问目录、访问扩展名HTML变为PHP、访问域名),为了能使旧的访问依旧生效,从而实现自动重定向到新的网站。

1.2 类似概念

地址重写:为了实现地址的标准化,如地址栏中中输入 www.baidu.com. 也可以输入 www.baidu.cn。最后都会被重写到 www.baidu.com 上。浏览器的地址栏也会显示www.baidu.com。即nginx把收到的客户端的请求后把客户端需要请求的内容所对应的服务器地址发给客户端,让客户端自己去获取,nginx同时返回302正确信息。

地址转发:指在网络数据传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址并将数据转发到最近的局域网的过程。

反向代理:当浏览器访问网站时,nginx反向代理服务器会代替客户端向后端服务器查找所需的内容,然后nginx反向代理服务器会把查找的内容返回给客户端。

地址重写和地址转发有以下不同点:

1. 地址重写会改变浏览器中的地址,使之变成重写成浏览器最新的地址。而地址转发不会改变浏览器的地址的。

2. 地址重写会产生两次请求,而地址转发只会有一次请求。

3. 地址转发一般发生在同一站点项目内部,而地址重写且不受限制。

4. 地址转发的速度比地址重定向快。

注意:重定向和反向代理都可以实现Nginx的内容重定向。

1.3 重定向状态码

301:代表永久性转移(Permanently Moved):旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;

302:代表暂时性转移(Temporarily Moved):旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

301和302状态码都表示重定向,表示浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(客户端输入的地址A瞬间变成了另一个地址B)。

1.4 涉及符号

  • 正则表达式
代码语言:javascript
复制
  1 ~			#表示匹配过程中区分大小写;
  2 ~*			#表示匹配过程中不区分大小写;
  3 !~			#如果 '~' 匹配失败时,那么该条件就为true;
  4 !~*			#如果 '~*' 匹配失败时,那么该条件就为true。

示例01:

代码语言:javascript
复制
  1 if ($http_user_agent ~ MSIE) {
  2 ……
  3 }

$http_user_agent值中是否含有 MSIE 字符串,如果包含则为true,否则为false。

注意:当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false。

示例02:

代码语言:javascript
复制
  1 if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" ){
  2   rewrite ^/$  http://www.cnblogs.com  permanent;
  3 }

解释:

$http_user_agent值若为相应的手机访问,则直接重定向至特定网页。

  • 文件匹配
代码语言:javascript
复制
  1 -f			#如果请求的文件存在,那么该条件为true;
  2 !-f			#如果该文件的目录存在,该文件不存在,那么返回true。如果该文件和目录都不存

在,请求的文件存在,也为false。

示例:

代码语言:javascript
复制
  1 if (-f $request_filename) {
  2 ……
  3 }

解释:判断请求的文件是否存在

代码语言:javascript
复制
  1 if (!-f $request_filename) {
  2 ……
  3 }

解释:判断请求的文件是否不存在

  • 目录匹配
代码语言:javascript
复制
  1 -d			#如果请求的目录存在,则返回true。否则返回false;
  2 !-d			#如果请求的目录不存在,但是该请求的上级目录存在,则返回true。如果该上级目录不存在,则返回false。
  3 -e和!-e		#用来判断是否存在文件或目录
  4 -x和!-x		#用来判断文件是否可执行
  • flag标记
代码语言:javascript
复制
  1 last			#表示完成rewrite,之后继续向下匹配新的location URI规则,浏览器地址栏URL地址不变。
  2 break			#本条规则匹配完成后,终止匹配, 不再匹配后面的规则,完成重写指令,浏览器地址栏URL地址不变。
  3 redirect		#返回302临时重定向,浏览器地址会显示跳转新的URL地址。
  4 permanent		#返回301永久重定向,浏览器地址会显示跳转新的URL地址。

注意:last和break的区别参考配置示例09。

last一般写在server和if中,而break一般使用在location中;

last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配;

break和last都能阻止继续执行后面的rewrite指令。

  • 其他全局变量
代码语言:javascript
复制
  1 $args			#该变量中存放了请求URL中的请求指令,同$query_string;
  2 $content_length		#该变量中存放了HTTP请求头中的Content-length字段。;
  3 $content_type		#该变量中存放了HTTP请求头中的Content-type字段;
  4 $document_root		#该变量中存放了针对当前请求的根路径。
  5 $document_uri		#该变量中存放了请求的当前URI, 但是不包括请求指令;
  6 $host			#变量中存放了请求的URL中的主机部分字段,如果请求中没有Host行,则等于设置的服务器名;
  7 $http_host		        #该变量与$host唯一区别带有端口号;
  8 $http_user_agent	        #该变量中存放客户端的代理信息;
  9 $http_cookie		#该变量中存放客户端的cookie信息。
 10 $limit_rate		        #对连接速率的限制;
 11 $request_method		#请求的方法,比如"GET"、"POST"等;
 12 $remote_addr		#该变量中存放客户端的地址;
 13 $remote_port		#该变量中存放了客户端与服务器建立连接的端口号;
 14 $remote_user		#该变量中存放客户端的用户名,认证用;
 15 $request_filename	        #该变量中存放了当前请求的资源文件的路径名;
 16 $request_body_file	        #该变量中存放了发给后端服务器的本地文件资源的名称;
 17 $request_method		#该变量中存放了客户端的请求方式,比如 'GET'、'POST'等。
 18 $request_uri		#该变量中存放了当前请求的URI,并且带请求指令,即带查询字符串,不包含主机名,如:”/foo/bar.php?arg=baz”;
 19 $query_string		#与$args相同;
 20 $scheme			#该变量中存放了客户端请求使用的协议,比如http或者是https;
 21 $server_protocol       	#该变量中存放了客户端请求协议的版本请求的协议版本,"HTTP/1.0"或"HTTP/1.1";
 22 $server_addr		#服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
 23 $server_name		#请求到达的服务器名;
 24 $server_port		#请求到达的服务器端口号;
 25 $uri			#请求的URI,可能和最初的值有不同,比如经过重定向之类的。

参数示例:

访问链接是:http://demo.linuxds.com:88/test1/test2/test.php

网站路径是:/var/www/html

代码语言:javascript
复制
  1 $host:demo.linuxds.com
  2 $server_port:88
  3 $request_uri:http://demo.linuxds.com:88/test1/test2/test.php
  4 $document_uri:/test1/test2/test.php
  5 $document_root:/var/www/html
  6 $request_filename:/var/www/html/test1/test2/test.php

1.5 return释义

return一般用于对请求的客户端直接返回响应状态码。在该作用域内return后面的所有nginx配置都是无效的。可以使用在server、location以及if配置中。除了支持跟状态码,还可以跟字符串或者url链接。

示例01:

代码语言:javascript
复制
  1 server{
  2     listen 80;
  3     server_name www.linuxds.com;
  4     return 403;
  5     rewrite /(.*) /abc/$1;		#该行配置位于return后,则不会被执行。
  6 }

示例02:

代码语言:javascript
复制
  1 server {
  2 .....
  3 
  4     if ($request_uri ~ "\.htpasswd|\.bak")
  5     {
  6         return 404;
  7         rewrite /(.*) /aaa.txt;		#该行配置位于return后,则不会被执行。
  8     }
  9 #如下为其他server,不受上一个server中的return影响,即若下面还有其他配置,会被执行。
 10 .....
 11 }

示例03:

代码语言:javascript
复制
  1 server{
  2     listen 80;
  3     server_name www.linuxds.com;
  4     return 200 "hello";
  5 }

说明:如果要想返回字符串,必须要加上状态码,否则会报错。

示例04:

代码语言:javascript
复制
  1 location ^~ /aming {
  2     default_type application/json ;
  3     return 200  '{"name":"xhy","id":"100"}';
  4 }					#返回的字符串也支持json数据。

示例05:

代码语言:javascript
复制
  1 location /test {
  2     return 200 "$host $request_uri";
  3 }					#返回的字符串也支持变量

示例06:

代码语言:javascript
复制
  1 server{
  2     listen 80;
  3     server_name www.linuxds.com;
  4     return http://www.linuxds.com/123.html;
  5     rewrite /(.*) /abc/$1;		#该行配置位于return后,则不会被执行。
  6 }

注意:return后面的url必须是以http://或者https://开头的。

二 重定向配置

2.1 配置语法

语法:rewrite regex replacement [flag];;

默认值:——

可配置段:server, location

作用:通过正则表达式的使用来改变URI。可以同时存在一个或多个指令。需要按照顺序依次对URL进行匹配和处理。

示例:

代码语言:javascript
复制
  1 rewrite ^/(.*) http://www.baidu.com/$1 permanent;

解释:

rewrite:固定关键字,表示开始进行rewrite匹配规则。

正则表达式^/(.*):正则表达式,匹配完整的域名和后面的路径地址。

replacement为http://www.baidu.com/$1:其中$1是取regex部分()里面的内容。如果匹配成功后跳转到的URL。

flag为permanent:代表永久重定向,即跳转到 http://www.baidu.com/$1 地址上。

2.2 配置示例01

代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite01.conf
  2 server {
  3     listen       80;
  4     server_name  cnblogs.linuxds.com;
  5     access_log  /var/log/nginx/cnblogs.access.log  main;
  6     error_log   /var/log/nginx/cnblogs.error.log  warn;
  7     location / {
  8     if ($host = 'cnblogs.linuxds.com') {
  9       rewrite ^/(.*) http://www.cnblogs.com redirect;
 10     }
 11   }
 12 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:结合if指令来对nginx请求进行判断,若访问http://cnblogs.linuxds.com,即$host = 'cnblogs.linuxds.com' 的时候,进行重定向跳转,重定向至 http://www.cnblogs.com。

浏览测试:http://cnblogs.linuxds.com,访问后会立刻跳转。

clipboard
clipboard

2.2 配置示例02

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir /usr/share/nginx/file/
  2 [root@nginx01 ~]# echo '<h1>File</h1>' > /usr/share/nginx/file/index.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite02.conf
  2 server {
  3     listen       80;
  4     server_name  file.linuxds.com;
  5     access_log  /var/log/nginx/file.access.log  main;
  6     error_log   /var/log/nginx/file.error.log  warn;
  7     location ~ .* {
  8         root   /usr/share/nginx/file;
  9         if ( !-e $request_filename ) {
 10             rewrite ^ http://www.cnblogs.com redirect;
 11     }
 12   }
 13 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:结合if指令来对nginx请求进行判断,若访问http://file.linuxds.com的资源存在root目录,则返回,若当前请求的资源文件不存在,则进行重定向跳转,重定向至 http://www.cnblogs.com。

浏览测试:http://file.linuxds.com/index.html,进行测试。

clipboard
clipboard

访问不存在的资源http://file.linuxds.com/aaaa,进行测试。

clipboard
clipboard

2.3 配置示例03

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir /usr/share/nginx/constant/
  2 [root@nginx01 ~]# echo '<h1>Constant</h1>' > /usr/share/nginx/constant/index.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite03.conf
  2 server {
  3     listen       80;
  4     server_name  constant.linuxds.com;
  5     access_log  /var/log/nginx/constant.access.log  main;
  6     error_log   /var/log/nginx/constant.error.log  warn;
  7     location ~ .* {
  8         root   /usr/share/nginx/constant;
  9         if ( !-e $request_filename ) {
 10             rewrite ^ /itzgr/ break;
 11             proxy_pass http://www.cnblogs.com;
 12     }
 13   }
 14 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:结合if指令来对nginx请求进行判断,若访问http://constant.linuxds.com的资源存在root目录,则返回,若当前请求的资源文件不存在,则进行重定向跳转,重定向至http://www.cnblogs.com/itzgr。

浏览测试:访问不存在的资源http://constant.linuxds.com/aaaa,进行测试。

clipboard
clipboard

2.4 配置示例04

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir /usr/share/nginx/last/
  2 [root@nginx01 ~]# echo '<h1>Last</h1>' > /usr/share/nginx/last/index.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite04.conf
  2 server {
  3     listen       80;
  4     server_name  last.linuxds.com;
  5     access_log  /var/log/nginx/last.access.log  main;
  6     error_log   /var/log/nginx/last.error.log  warn;
  7     location ~ .* {
  8         root   /usr/share/nginx/last;
  9         rewrite /last.html /index.html last;
 10   }
 11 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:访问 /last.html 的时候,页面内容重写到 /index.html 中。

浏览测试:浏览器访问http://last.linuxds.com/。

clipboard
clipboard

浏览器访问http://last.linuxds.com/last.html。

clipboard
clipboard

2.5 配置示例05

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir /usr/share/nginx/break/
  2 [root@nginx01 ~]# echo '<h1>Break</h1>' > /usr/share/nginx/break/index.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite05.conf
  2 server {
  3     listen       80;
  4     server_name  break.linuxds.com;
  5     access_log  /var/log/nginx/break.access.log  main;
  6     error_log   /var/log/nginx/break.error.log  warn;
  7     location ~ .* {
  8         root   /usr/share/nginx/break;
  9         rewrite /break.html /index.html break;
 10   }
 11 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:访问 /break.html 的时候,页面内容重写到 /index.html 中,并停止后续的匹配。

浏览测试:浏览器访问http://break.linuxds.com/。

clipboard
clipboard

浏览器访问http://break.linuxds.com/break.html。

clipboard
clipboard

2.6 配置示例06

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir /usr/share/nginx/rewrite/
  2 [root@nginx01 ~]# echo '<h1>Rewrite</h1>' > /usr/share/nginx/rewrite/index.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite06.conf
  2 server {
  3     listen       80;
  4     server_name  rewrite.linuxds.com;
  5     access_log  /var/log/nginx/rewrite.access.log  main;
  6     error_log   /var/log/nginx/rewrite.error.log  warn;
  7     location ~ .* {
  8         root   /usr/share/nginx/rewrite;
  9         rewrite /rewrite.html /index.html redirect;
 10   }
 11 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:访问 /redirect.html 的时候,页面直接302定向到 /index.html中。

浏览测试:浏览器访问http://rewrite.linuxds.com/。

clipboard
clipboard

浏览器访问http://rewrite.linuxds.com/rewrite.html。

clipboard
clipboard

2.7 配置示例07

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir /usr/share/nginx/permanent/
  2 [root@nginx01 ~]# echo '<h1>Permanent</h1>' > /usr/share/nginx/permanent/index.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite07.conf
  2 server {
  3     listen       80;
  4     server_name  permanent.linuxds.com;
  5     access_log  /var/log/nginx/permanent.access.log  main;
  6     error_log   /var/log/nginx/permanent.error.log  warn;
  7     location ~ .* {
  8         root   /usr/share/nginx/permanent;
  9         rewrite /permanent.html /index.html permanent;
 10   }
 11 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:访问 /permanent.html 的时候,页面直接301定向到 /index.html中。

浏览测试:浏览器访问http://permanent.linuxds.com/。

clipboard
clipboard

浏览器访问http://permanent.linuxds.com/permanent.html。

clipboard
clipboard

2.8 配置示例08

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/dirweb/dir
  2 [root@nginx01 ~]# echo '<h1>Dirweb</h1>' > /usr/share/nginx/dirweb/dir/index.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite08.conf
  2 server {
  3     listen       80;
  4     server_name  dirweb.linuxds.com;
  5     access_log  /var/log/nginx/dirweb.access.log  main;
  6     error_log   /var/log/nginx/dirweb.error.log  warn;
  7     location ~ .* {
  8         root   /usr/share/nginx/dirweb/;
  9         rewrite ^/html/(.+?).html$ /dir/$1.html permanent;
 10   }
 11 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:访问 /html/*.html,页面直接301定向到 /dir/*.html 中。

浏览测试:浏览器访问http://dirweb.linuxds.com/dir/index.html。

clipboard
clipboard

浏览器访问http://dirweb.linuxds.com/html/index.html。

clipboard
clipboard

2.9 配置示例09

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/lbreak
  2 [root@nginx01 ~]# echo '<h1>Lbreak</h1>' > /usr/share/nginx/lbreak/index.html
  3 [root@nginx01 ~]# echo '<h1>Test_Lbreak</h1>' > /usr/share/nginx/lbreak/test.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite09.conf
  2 server {
  3     listen       80;
  4     server_name  lbreak.linuxds.com;
  5     access_log  /var/log/nginx/lbreak.access.log  main;
  6     error_log   /var/log/nginx/lbreak.error.log  warn;
  7     root         /usr/share/nginx/lbreak/;
  8     location / {
  9         rewrite /last/ /test.html last;
 10         rewrite /break/ /test.html break;
 11     }
 12     location = /test.html {
 13         return http://www.cnblogs.com;
 14     }
 15 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:访问/last/时重写到/test.html,然后使用新的uri再匹配,正好匹配到locatoin = /test.html然后返回http://www.cnblogs.com;

访问/break时重写到/test.html,由于返回了break,则直接停止了后续匹配,因此返回/test.html内容。

浏览测试:浏览器访问http://lbreak.linuxds.com/last/。

clipboard
clipboard

浏览器访问http://lbreak.linuxds.com/break/。

clipboard
clipboard

2.10 配置示例10

代码语言:javascript
复制
  1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/admin/xhy
  2 [root@nginx01 ~]# echo '<h1>Admin</h1>' > /usr/share/nginx/admin/admin.html
代码语言:javascript
复制
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite10.conf
  2 server {
  3     listen       80;
  4     server_name  admin.linuxds.com;
  5     access_log  /var/log/nginx/admin.access.log  main;
  6     error_log   /var/log/nginx/admin.error.log  warn;
  7     root         /usr/share/nginx/admin/;
  8     location / {
  9         rewrite /xhyadmin.html /admin.html break;
 10     }
 11     location /admin.html {
 12         return 403;
 13     }
 14 }
代码语言:javascript
复制
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重载配置文件

配置解释:访问http://admin.linuxds.com/admin.html时直接返回无权限的403代码,必须通过http://admin.linuxds.com/xhyadmin.html来进行访问,即访问/xhyadmin.html重写到/admin.html,但不能直接访问/admin.html,可应用于隐藏真实地址。

浏览测试:http://admin.linuxds.com/admin.html。

clipboard
clipboard

浏览器访问http://admin.linuxds.com/xhyadmin.html。

clipboard
clipboard

三 其他简略配置

代码语言:javascript
复制
  1 # 如果文件不存在则返回400
  2 if (!-f $request_filename) {
  3     return 400;
  4 }
代码语言:javascript
复制
  1 # 如果host不是demo.linuxds.com,则301到www.baidu.com中
  2 if ( $host != 'demo.linuxds.com' ){
  3     rewrite ^/(.*)$ https://www.baidu.com/$1 permanent;
  4 }
代码语言:javascript
复制
  1 # 如果请求类型不是POST则返回405
  2 if ($request_method = POST) {
  3     return 405;
  4 }
代码语言:javascript
复制
  1 # 如果参数中有 a=1 则301到demo.linuxds.com
  2 if ($args ~ a=1) {
  3     rewrite ^ http://demo.linuxds.com/ permanent;
  4 }
代码语言:javascript
复制
  1 # 如果客户使用IE浏览器访问,则重定向到/nginx-ie目录下:
  2 if ($http_user_agent ~ MSIE) {
  3     rewrite ^(.*)$ /nginx-ie/$1 break;
  4 }
代码语言:javascript
复制
  1 # 多目录重定向为参数的形式。
  2 # 将xhy.linuxds.com/images/girl 重定向为 xhy.linuxds.com/index.php?act=images&name=xhy&id=girl参数的形式。
  3 if ($host ~* (.*)\.domain\.com) {
  4     set $sub_name $1;
  5     rewrite ^/images\/(\d+)\/?$ /index.php?act=images&cid=$sub_name&id=$1 last;
  6 }
代码语言:javascript
复制
  1 # 将目录对调,/images/girl -> /girl?id=images。
  2     rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
代码语言:javascript
复制
  1 # 目录通过重定向自动追加/
  2 if (-d $request_filename){
  3     rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
  4 }
代码语言:javascript
复制
  1 # 简单域名重定向
  2 server
  3 {
  4     listen 80;
  5     server_name xhy.linuxds.com;
  6     index index.html index.htm index.php;
  7     root /usr/share/nginx/xhy/;
  8     rewrite ^/ http://www.cnblogs.com;
  9     access_log off;
 10 }
 11 server {
 12     listen       80;
 13     server_name  linuxds.com www.linuxds.com;
 14     if ($host != 'www.linuxds.com' ) {
 15         rewrite ^/(.*)$ http://www.linuxds.com/$1 permanent;
 16     }
 17 }
代码语言:javascript
复制
  1 # 指定域名重定向
  2     server_name xhy.linuxds.com xhy.linuxds.cn;
  3     index index.html index.htm index.php;
  4     root /usr/share/nginx/xhy/;
  5     if ($host ~ "linuxds\.cn") {
  6     rewrite ^(.*) http://xhy.linuxds.com$1/ permanent;
  7 }
代码语言:javascript
复制
  1 # 多域名重定向
  2     server_name xhy.linuxds.com xhy.linuxds.cn xhy.linuxds.net;
  3     index index.html index.htm index.php;
  4     root /usr/share/nginx/xhy/;
  5     if ($host !~ "linuxds\.com") {
  6     rewrite ^(.*) http://xhy.linuxds.com/$1 permanent;
  7 }
代码语言:javascript
复制
  1 # 三级域名跳转。
  2     if ($http_host ~* "^(.*)\.i\.linuxds\.com$") {
  3     rewrite ^(.*) http://xhy.linuxds.com$1/;
  4     break;
  5 }
代码语言:javascript
复制
  1 # 域名镜像
  2 server
  3 {
  4     listen 80;
  5     server_name mirror.linuxds.com;
  6     index index.html index.htm index.php;
  7     root /usr/share/nginx/xhy/;
  8     rewrite ^/(.*) http://xhy.linuxds.com/$1 last;
  9     access_log off;
 10 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 重定向概述
    • 1.1 重定向介绍
      • 1.2 类似概念
        • 1.3 重定向状态码
          • 1.4 涉及符号
            • 1.5 return释义
            • 二 重定向配置
              • 2.1 配置语法
                • 2.2 配置示例01
                  • 2.2 配置示例02
                    • 2.3 配置示例03
                      • 2.4 配置示例04
                        • 2.5 配置示例05
                          • 2.6 配置示例06
                            • 2.7 配置示例07
                              • 2.8 配置示例08
                                • 2.9 配置示例09
                                  • 2.10 配置示例10
                                  • 三 其他简略配置
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档