• Nginx实现URL重写


    本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL。

    1.准备工作。

    结合本文场景,需要安装Nginx。

    1.1 关于Linux系统安装Nginx可以参考我的文章---(传送门)。

    2.什么是URL重写?

    URL重写是指将一个URL请求重新写成网站可以处理的另一个URL的过程。这样说可能不是很好理解,举个例子来说明一下,在开发中可能经常遇到这样的需求,比如通过浏览器请求的http://localhost:8080/getUser?id=1,但是需要通过SEO优化等等原因,需要把请求的地址重写为http://localhost:8080/getUser/1这样的URL,从而符合需求或者更好的被网站阅读。

    当遇到这种请求的时候,就需要使用到UrlRewrite重写或者使用一些网关路由,如SpringCloud的Gateway,Zuul,又或者是Nginx来实现这个功能。

    本文介绍Nginx实现URL重写。

    3.使用介绍

    在Nginx中使用URL重写需要使用到一个指令-----rewrite,其语法如下:

    rewrite regex replacement [flag]; 
    
    • regex :可以使用正则或者字符串来表示相匹配的地址。
    • replacement:可以表示重定向的地址。
    • flag :flag标志的作用是用于控制当匹配到对应的rewrite规则后是否继续检查后续的rewrite规则。

    flag值为如下四种,分别是:

    • last:停止处理当前的rewrite指令集,而后通过重写后的规则重新发起请求,浏览器地址栏URL地址不变。
    • break:和break指令一样,都是停止处理当前上下文中的其他重写模块指令。
    • redirect:如果替换字符串不以“ http://”,“ https://”或“ $scheme” 开头,返回带有302代码的临时重定向,浏览器地址会显示跳转后的URL地址。
    • permanent:返回301代码的永久重定向,浏览器地址栏会显示跳转后的URL地址。

    例如:

    server {
        ...
        rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;
        rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra  last;
        return  403;
        ...
    }
    

    另外还可以根据if来判断,指令如下:

    if (condition) { ... }
    

    其中condition是条件,如果为true,则执行大括号中的内容:

    • 使用“ =”和“ !=”运算符比较变量和字符串;
    • 使用“ ~”(对于区分大小写的匹配)和“ ~”(对于不区分大小写的匹配)运算符,将变量与正则表达式进行匹配。正则表达式可以包含可供以后在$1.. $9变量中重用的捕获。负操作符“ !~”和“ !~”也可用。如果正则表达式包含“ }”或“ ;”字符,则整个表达式应包含在单引号或双引号中。
    • 使用“ -f”和“ !-f”运算符检查文件是否存在;
    • 使用“ -d”和“ !-d”运算符检查目录是否存在;
    • 使用“ -e”和“ !-e”运算符检查文件,目录或符号链接是否存在;
    • 使用“ -x”和“ !-x”运算符检查可执行文件。

    例如:

    if ($http_user_agent ~ MSIE) {
        rewrite ^(.*)$ /msie/$1 break;
    }
    
    if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
        set $id $1;
    }
    
    if ($request_method = POST) {
        return 405;
    }
    
    if ($slow) {
        limit_rate 10k;
    }
    
    if ($invalid_referer) {
        return 403;
    }
    

    4.Nginx配置

    本文例子只是将请求跳转到本人的博客首页http://www.dalaoyang.cn/,配置如下:

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
    
       server {
           listen       10000;
           server_name  localhost;
    
           #如果host不是dalaoyang.cn,则301到www.dalaoyang.cn中
           if ( $host != "dalaoyang.cn" ){
             rewrite ^/(.*)$ https://www.dalaoyang.cn/$1 last;
           }
    
        }
    
    }
    

    5.测试

    测试就比较简单了,在浏览器访问http://localhost:10000/about,会自动跳转到https://www.dalaoyang.cn/about,如图所示。

    6.总结

    大部分内容都是参考自Nginx官网来学习的,官网的例子都很详细。

    参考自Nginx官网ngx_http_rewrite_module模块官方API---传送门

  • 相关阅读:
    OpenCV程序在生产环境中运行
    C#调用C++导出(dllexport)方法
    IIS7.5 GZip配置
    wcf学习笔记--初识wcf
    Greenplum installation guide
    Cloudera 5.8.2 Installation guide
    WPF DataGrid 合并单元格
    wpf DataGrid CheckBox列全选
    WPF button 圆角制作
    WPF passwordbox 圆角制作
  • 原文地址:https://www.cnblogs.com/dalaoyang/p/10264919.html
Copyright © 2020-2023  润新知