nginx的rewrite用法

地址重写可以达到目的:

缩短URL,隐藏实际路径提高安全性

易于用户记忆和键入

易于被搜索引擎收录

常见网站应用场景:

1. 网站文件移动或文件目录名称改变,出于SEO需要,你需要保持旧的URL


规则:

rewrite regex replacement flag

- flag : break, last, redirect, permanent

last : 停止当前这个请求,并根据rewrite匹配的规则重新发起一个请求。新请求又从第一个阶段执行。。。

break: 相对last, break并不会重新发起一个请求,只是跳过当前的rewrite阶段,并执行本请求后续的执行阶段

redirect :302临时重定向,地址栏改变,爬虫不更新URI

permanent:  301永久重定向,地址栏改变,爬虫更新URI

下面重点说下 last 和 break 的区别,并做个小实验

编辑/usr/local/nginx/conf/nginx.conf

location /break/  {

     rewrite ^/break/(.*) /test/$1 break;

    return 402;

 }

location /last/ {

    rewrite ^/last/(.*) /test/$1 last;

    return 403;

}

location /test/ {

    return 508;

 }

请求 tpl01.liang.com/break/break.html

返回 404; //如果存在 /test/break.html页面则 返回200

请求 tpl01.liang.com/last/last.html

返回 508  //不管存不存在 /test/last.html 都是返回508

原因分析: break 与last都停止后续rewrite指令集,不同之处在于last会重新发起新的请求并重新匹配location, 而break不会

rewrite regex replacement flag

正则表达式匹配模式如下:

区分大小写匹配: ~

不分区大小写匹配: ~*

区分大小写不匹配: !~

不区分大小写不匹配: !~*

匹配模式如下:

-判断文件是否存在: -f

-判断目录是否存在:-d

-判断文件是否可执行: -x

-判断文件,目录,连接是否存在: -e

应用案例

例子一: *.jpg或*.gif --> logo.png

location /{

    root html;

    index index.html index.htm;

    rewrite \.(gif|jpg)$  /logo.png;

}

例子二:域名跳转

tpl01.liang.com --> tpl02.liang.com

server {

    listen 80;

    server_name tpl01.liang.com;

    location /{

        root html;

        index index.html index.htm;

        rewrite ^/ http://tpl02.liang.com/;

    }

}

例子三: 根据浏览器返回不同的页面

    server {

        listen 80;

        server_name tpl01.liang.com

        location /{

            root html;

            index.html index.htm;

            if($http_user_agent ~MSIE){

                rewrite ^(.*)$   /nginx-ie/$1  break;

         }

    }

 }

例子四: 访问资源不存在时,重定向到指定页面

if(!-e $request_filename){

       rewrite ^/  http://tpl01.liang.com/none.html;

 }



猜你喜欢

转载自blog.csdn.net/u013862108/article/details/80016345
今日推荐