zoukankan      html  css  js  c++  java
  • nginx rewrite

    nginx rewrite

     
    rewrite的作用

    rewrite可以实现url的重定向,把用户请求的url转发到另一个url,但用户浏览器地址并不改变

    例如常用的伪静态化,就是通过rewrite实现的

    /user/123 => /user.php?id=123

    语法

    rewrite regex replacement [flag];

    regex - 定义url匹配规则

    replacement - 要重写的目标url

    [flag] - 标志位,是可选项,定义重写后的相关操作

    规则说明

    (1)rewrite只能放在server{},location{},if{}中

    (2)只能对域名后边的除参数外的字符串起作用

    例如 http://z.com/a/we/index.php?id=1,只对/a/we/index.php重写,也就是 regex 匹配的是 /a/we/index.php 这个字符串


    示例

    (1)如果是IE浏览器发出的请求,就把请求转到ie目录下

    if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /ie/$1 break;
    }

    (2)对形如/images/bla_500x400.jpg的文件请求,重写到/resizer/bla.jpg?width=500&height=400地址

    rewrite ^/images/(.*)_(d+)x(d+).(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last;

    这里适用了标志位-last,意思是这是最后一条rewrite规则

    (3)域名跳转

    server
    {
    listen 80;
    server_name jump.test.com;
    index index.html index.htm index.php;
    root /opt/www;
    rewrite ^/ http://www.test.com/;
    }

    (4)把符合规则的目录转换到其他目录

    rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2;

    (5)将文件名转成多级目录下的文件

    例如 /job-123-456-789.html 指向/job/123/456/789.html

    rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+).html$ /job/$1/$2/jobshow_$3.html last;

    flag标志位

    last : 相当于Apache的[L]标记,表示完成rewrite

    break : 停止执行当前虚拟主机的后续rewrite指令集

    redirect : 返回302临时重定向,地址栏会显示跳转后的地址

    permanent : 返回301永久重定向,地址栏会显示跳转后的地址

    last和break的区别

    last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配
  • 相关阅读:
    Spring Boot
    Spring Boot – Jetty配置
    如何使ESLint在Visual Studio 2019和2017中工作: 2019 v16和2017> = v15.8
    CentOS 7 安装 Nginx
    HTTPS-使用Certbot自动配置Let’s Encrypt证书
    centos7升级内核到最新版本
    [C#.net]Connection Timeout和Command Timeout
    Redis中切换db
    Redis 模糊查询删除操作
    [Abp vNext 源码分析]
  • 原文地址:https://www.cnblogs.com/jun1019/p/6260679.html
Copyright © 2011-2022 走看看