黑马程序员技术交流社区

标题: Nginx的rewrite详解 [打印本页]

作者: 庭院深深深几许    时间: 2019-4-18 13:22
标题: Nginx的rewrite详解
  1、rewrite语法:
  指令语法:rewrite regex replacement[flag];
  默认值:none
  应用位置:server、location、if
  rewrite是实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到replacement,结尾是flag标记
  简单的小例子:
[HTML] 纯文本查看 复制代码
        
rewrite ^/(.*) http://www.baidu.com/ permanent;     # 匹配成功后跳转到百度,执行永久跳转

  常用正则表达式:

字符
描述
\
将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用
^
匹配输入字符串的起始位置
$
匹配输入字符串的结束位置
*
匹配前面的字符零次或者多次
+
匹配前面字符串一次或者多次
?
匹配前面字符串的零次或者一次
.
匹配除“\n”之外的所有单个字符
(pattern)
匹配括号内的pattern
  rewrite 最后一项flag参数:
标记符号
说明
last
本条规则匹配完成后继续向下匹配新的location URI规则
break
本条规则匹配完成后终止,不在匹配任何规则
redirect
返回302临时重定向
permanent
返回301永久重定向
  2、应用场景:
  调整用户浏览的URL,看起来规范
  为了让搜索引擎收录网站内容,让用户体验更好
  网站更换新域名后
  根据特殊的变量、目录、客户端信息进行跳转
  3、常用301跳转:
  之前我们通过用起别名的方式做到了不同地址访问同一个虚拟主机的资源,现在我们可以用一个更好的方式做到这一点,那就是跳转的方法
  还是用www.brian.com虚拟主机为例子,修改配置文件brian.conf:
[HTML] 纯文本查看 复制代码
[root@Nginx www_date]# cat brian.conf 
    server {                          # 添加个server区块做跳转
    listen     80;
    server_name  brian.com;
    rewrite ^/(.*) http://www.brian.com/$1 permanent;
    }
    server {
        listen       80;
        server_name  www.brian.com;
        location / {
            root   html/brian;
            index  index.html index.htm;
        }
        access_log logs/brian.log main gzip buffer=128k flush=5s;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

  检查语法:
  [root@Nginx conf]#
  [root@Nginx conf]# ../sbin/nginx -t
  nginx: the configuration file /opt/nginx//conf/nginx.conf syntax is ok

  nginx: configuration file /opt/nginx//conf/nginx.conf test is successful
  平滑重启:
1

[root@Nginx conf]# ../sbin/nginx -s reload


  windows测试效果:
  4、域名跳转:
  我们不仅可以做相同虚拟主机的资源域名跳转,也能做不同虚拟主机的域名跳转,我们下面就跳转下当访问brian.com域名的时候跳转到www.baidu.com的页面:

  修改www.brian.com虚拟主机的brian.conf配置文件:
[HTML] 纯文本查看 复制代码
[root@Nginx www_date]# cat brian.conf 
    server {
        listen       80;
        server_name  brian.com;
        location / {
            root   html/brian;
            index  index.html index.htm;
        }
    if ( $http_host ~* "^(.*)") {
        set $domain $1;
        rewrite ^(.*) http://www.baidu.com break;
    }
        access_log logs/brian.log main gzip buffer=128k flush=5s;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

  windows测试:(访问brian.com 跳转到了www.baidu.com)






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2