精华内容
下载资源
问答
  • Nginx URL重写(rewrite)配置及信息详解URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中Nginx URL重写(rewrite)介绍和apache等web服务软件一样,rewrite的组要功能是实现RUL...

    Nginx URL重写(rewrite)配置及信息详解

    URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中

    Nginx URL重写(rewrite)介绍

    和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持

    rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。

    rewrite语法格式及参数语法说明如下:

    rewrite            [flag];

    关键字      正则        替代内容          flag标记

    关键字:其中关键字error_log不能改变

    正则:perl兼容正则表达式语句进行规则匹配

    替代内容:将正则匹配的内容替换成replacement

    flag标记:rewrite支持的flag标记

    flag标记说明:

    last  #本条规则匹配完成后,继续向下匹配新的location URI规则

    break  #本条规则匹配完成即终止,不再匹配后面的任何规则

    redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址

    permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

    rewrite参数的标签段位置:

    server,location,if

    例子:

    rewrite ^/(.*) http://www.czlun.com/$1 permanent;

    说明:

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

    regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址

    replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。

    flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上

    regex 常用正则表达式说明

    字符

    描述

    \

    将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”

    ^

    匹配输入字符串的起始位置

    $

    匹配输入字符串的结束位置

    *

    匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

    +

    匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”

    ?

    匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}"

    .

    匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。

    (pattern)

    匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要\(Content\)

    rewrite 企业应用场景

    Nginx的rewrite功能在企业里应用非常广泛:

    u 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

    u 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

    u 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com

    u 根据特殊变量、目录、客户端的信息进行URL调整等

    Nginx配置rewrite过程介绍

    (1)创建rewrite语句

    vi conf/vhost/www.abc.com.conf

    #vi编辑虚拟主机配置文件

    文件内容

    server {

    listen 80;

    server_name abc.com;

    rewrite ^/(.*) http://www.abc.com/$1 permanent;

    }

    server {

    listen 80;

    server_name www.abc.com;

    location / {

    root /data/www/www;

    index index.html index.htm;

    }

    error_log    logs/error_www.abc.com.log error;

    access_log    logs/access_www.abc.com.log    main;

    }

    或者

    server {

    listen 80;

    server_name abc.com www.abc.com;

    if ( $host != 'www.abc.com'  ) {

    rewrite ^/(.*) http://www.abc.com/$1 permanent;

    }

    location / {

    root /data/www/www;

    index index.html index.htm;

    }

    error_log    logs/error_www.abc.com.log error;

    access_log    logs/access_www.abc.com.log    main;

    }

    (2)重启服务

    确认无误便可重启,操作如下:

    nginx -t

    #结果显示ok和success没问题便可重启

    nginx -s reload

    (3)查看跳转效果

    打开浏览器访问abc.com

    页面打开后,URL地址栏的abc.com变成了www.abc.com说明URL重写成功。

    展开全文
  • Nginx URL 重写

    2020-04-27 19:04:34
    一、URL重写介绍 和apache等web服务软件一样,rewrite的主要功能是实现URL地址的重定向。 Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。 默认参数编译nginx就会支持rewrite...

    一、URL重写介绍

    和apache等web服务软件一样,rewrite的主要功能是实现URL地址的重定向。

    Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。

    默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持。

    Rewrite功能是Nginx服务器提供的一个重要功能。

    几乎是所有的web产品必备技能,用于实现URL重写。

    URL重写是非常有用的功能,比如它可以在我们在改变网站结构后,不需要客户端修改原来的书签,也不需要其他网站修改对我们网站的友情链接,还可以在一定程度上提高网站的安全性,能够让我们的网站显得更专业。

    二、应用场景

    域名变更 (京东)

    用户跳转 (从某个连接跳到另一个连接)

    伪静态场景 (便于CDN缓存动态页面数据)

    三、URL重写原理

    在这里插入图片描述

    四、URL重写

    URL 模块语法

    set 设置变量
    if 负责语句中的判断
    return 返回返回值或URL
    break 终止后续的rewrite规则
    rewrite 重定向URL
    

    set指令 自定义变量

    Syntax:
    
    set $variable value;
    
    Default:
    
    —
    
    Context:
    
    server, location, if
    

    将http://www.ayitula.com 重写为 http://www.ayitula.com/baism:

    location / {
                    set $name baism;
                    rewrite ^(.*)$ http://www.ayitula.com/$name;
            }
    

    if 指令 负责判断

    Syntax:
    
    if (condition) { ... }
    
    Default:
    
    —
    
    Context:
    
    server, location
    

    条件匹配

    模糊匹配 ~匹配 !~不匹配 ~* 不区分大小写的匹配

    精确匹配 = !=

    location / {
            root html;
                index index.html index.htm;
                if ($http_user_agent ~* 'Chrome') {
                        break;
                        return 403;
                        #return http://www.jd.com;
                }
        }
    

    return 指令 定义返回数据

    Syntax: return code [text];
    
    return code URL;
    
    return URL;
    
    Default: —
    
    Context: server, location, if
    
    location / {
      root html;
           index index.html index.htm;
           if ($http_user_agent ~* 'Chrome') {
                   return 403;
                   #return http://www.jd.com;
           }
    }
    

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

    Syntax: break;
    
    Default:—
    
    Context:server, location, if
    
    location / {
                 root html;
                 index index.html index.htm;
                 if ($http_user_agent ~* 'Chrome') {
                         break;
                         return 403;
      }
    }
    

    rewrite指令 实现重写url

    rewrite <regex> <replacement> [flag];
    

    关键字 正则 替代内容 flag标记

    flag:

    last #本条规则匹配完成后,继续向下匹配新的location URI规则

    break #本条规则匹配完成即终止,不再匹配后面的任何规则

    redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址

    permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

    重定向就是将网页自动转向重定向,permanent和redirect从定向的区别

    301永久性重定向:新网址完全继承旧网址,旧网址的排名等完全清零

    301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。

    302临时性重定向:对旧网址没有影响,但新网址不会有排名

    搜索引擎会抓取新的内容而保留旧的网址

    permanent标志:永久重定向

    www.ayitula.com     重写为  www.jd.com
    server {
            listen        80;
            server_name www.ayitula.com;
            location / {
                rewrite ^/$ http://www.jd.com permanent;
              }
    }
    

    redirect标志:临时重定向

    域名跳转
    www.ayitula.com     重写为  www.jd.com
    server {
            listen        80;
            server_name www.ayitula.com;
            location / {
                rewrite ^/$ http://www.jd.com redirect;
    
              }
    }
    

    break标志: 类似临时重定向

    域名跳转
    www.ayitula.com     重写为  www.jd.com
    server {
            listen        80;
            server_name www.ayitula.com;
            location / {
                rewrite ^/$ http://www.jd.com break;
              }
    }
    

    last标志:

    url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变

    last 一般出现在server或if中

    根据用户浏览器重写访问目录

    如果是chrome浏览器  就将  
    http://192.168.10.42/$URI
       重写为  
    http://http://192.168.10.42/chrome/$URI
    
    实现 步骤
    1)URL重写
    2)请求转给本机location
    
    
    
    location / {
    .....
    if ($http_user_agent ~* 'chrome'){
              #^ 以什么开头 ^a
              #$ 以什么结尾 c$
              #. 除了回车以外的任意一个字符
              #* 前面的字符可以出现多次或者不出现
              #更多内容看正则表达式 re
              rewrite ^(.*)$ /chrome/$1 last;
              }
    
    
           location /chrome {
              root html ;
              index index.html;
            }
    }
    
    展开全文
  • Nginx URL重写

    2019-04-19 15:00:00
    一.Url重写的概念 URL 重写是拦截客户端传入 Web 请求URL并自动将其定向到到规则指定的 URL 的过程。比如浏览器发来请求http://www.bawei.com/hello.html,服务器自动将这个请求中定向为...

    一.Url重写的概念

    URL 重写是拦截客户端传入 Web 请求URL并自动将其定向到到规则指定的 URL 的过程。比如浏览器发来请求 http://www.bawei.com/hello.html ,服务器自动将这个请求中定向为http://www.bawei.com/index.php?method=hello
    Url重写的目的是主要是利于seo,静态页面的方式,比较容易被搜索引擎给搜集

    二. 重写常规步骤

    1.把网页上带链接的地方,都换上新的静态化链接。搜索引擎和浏览器将通过该链接来发生请求。(有些人做修改不是在网页上,而是进行动态链接向静态链接的转向,这是严重错误的)
    2.在nginx配置文件中添加rewrite重写规则。

    三. 核心知识点

    (一) rewrite语法格式及参数语法说明如下:

        rewrite    <regex>    <replacement>    [flag];
        关键字      正则        替代内容          flag标记
     
        关键字:其中关键字error_log不能改变
         正则:perl兼容正则表达式语句进行规则匹配
         替代内容:将正则匹配的内容替换成replacement
        flag标记:rewrite支持的flag标记
     
    flag标记说明:
    last  #本条规则匹配完成后,继续向下匹配新的location URI规则
    break  #本条规则匹配完成即终止,不再匹配后面的任何规则
    redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址
    permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

    (二)rewrite参数的标签段位置:

    server,location,if

    (三)例子:

    rewrite ^/(.*) http://www.bawei.com/$1 permanent;
    说明:                                        
    rewrite为固定关键字,表示开始进行rewrite匹配规则
    regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
    replacement部分是http://www.bawei.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。
    flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.bawei.com/$1 地址上

    (四)regex 常用正则表达式说明

    字符描述
    </td> 将后面接着字符标记为一个特殊字符或一个原义字符或一个向后引用。如“n”匹配一个换行符,而“$”则匹配“$”
    ^ 匹配输入字符串的起始位置
    $ 匹配输入字符串结束位置
    * 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
    + 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”
    ? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}"
    . 匹配除“n”之外的任何单个字符,若要匹配包括“n”在内的任意字符,请使用诸如“[.n]”之类的模式。
    (pattern) 匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要(Content)

    (五)rewrite 企业应用场景

    Nginx的rewrite功能在企业里应用非常广泛:
     可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
    为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
    网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com
    根据特殊变量、目录、客户端的信息进行URL调整等

    (六)Nginx配置rewrite过程介绍

    (1)创建rewrite语句

    vi conf/vhost/www.abc.com.conf
    #vi编辑虚拟主机配置文件

    文件内容
    server {
            listen 80;
            server_name abc.com;
            rewrite ^/(.*) http://www.abc.com/$1 permanent;
    }
     
     
    server {
            listen 80;
            server_name www.abc.com;
            location / {
                    root /data/www/www;
                    index index.html index.htm;
            }
            error_log    logs/error_www.abc.com.log error;
            access_log    logs/access_www.abc.com.log    main;
    }
    或者
    server {
            listen 80;
            server_name abc.com www.abc.com;
            if ( $host != 'www.abc.com'  ) {
                    rewrite ^/(.*) http://www.abc.com/$1 permanent;
            }
            location / {
                    root /data/www/www;
                    index index.html index.htm;
            }
            error_log    logs/error_www.abc.com.log error;
            access_log    logs/access_www.abc.com.log    main;
    }
    (2)重启服务
    确认无误便可重启nginx,操作如下:

    nginx -t
    #结果显示ok和success没问题便可重启
    service nginx restart

    (3)查看跳转效果
    打开浏览器访问abc.com
    页面打开后,URL地址栏的abc.com变成了www.bawei.com说明URL重写成功。

    四.完整示例

    1 重定向!
    a.html页面内容为“This is AAA!!!”
    b.html页面内容为“This is BBB!!!”
    原地址

    rewrite配置后

    复制代码
      location / {
            root   html;
            index  index.php index.html index.htm;
        #rewrite /show/(\d+).html$ /show.php?id=$1 last;
          rewrite /show/(\d+)/(.*).html$ /show.php?id=$1&name=$2 last;
        #临时重定向和永久重定向
         # rewrite /a.html /b.html redirect;
          rewrite /a.html /b.html permanent;
    }
    复制代码

    2 伪静态

     

    Rewrite配置后

    复制代码
    1 location / {
    2     root   /usr/share/nginx/html/bawei;
    3     index  index.php index.html index.htm;
    4     rewrite /list/([0-9]+).html$ /list.php?id=$1 last;
    5 }
    复制代码

    3 防盗链
    允许www.bawei.com此域名正常访问,www.baba.com不允许访问图片资源

    Rewrite配置防盗链后使用www.baba.com域名访问

    复制代码
     1 server {
     2 
     3 listen       80;
     4 server_name  www.bawei.com www.baba.com;
     5 
     6 #charset koi8-r;
     7 #access_log  /var/log/nginx/host.access.log  main;
     8 
     9 location ~* \.(gif|jpg|png|jpeg)$ {
    10     expires     30d;
    11 }
    复制代码

    #配置白名单 

    valid_referers *.bawei.com www.bawei.com;  

    #如果不在白名单内则返回1

    复制代码
    1     if ($invalid_referer) {
    2             rewrite ^/ https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2130925602,2536254888&fm=27&gp=0.jpg;
    3             #return 404;
    4     }
    5 }
    复制代码

    4 动静分离
    Nginx动静分离实现:
    Nginx是一种轻量级,高性能,多进程的Web服务器,非常适合作为静态资源的服务器使用,而动态的访问操作可以使用稳定的Apache、Tomcat及IIS等来实现,这里就以Nginx作为代理服务器的同时,也使用其作为静态资源的服务器,而动态的访问服务器就以Apache为例说明。

    一、原理

    原理:

    说明:
    1、代理服务器和静态服务器即为一台服务器上,这里只是为了明显区分动静分离所处服务器的不同;
    2、静态服务器中,存放的资源主要是源代码文件、图片、属性、样式以及其它所有非动态的资源文件;
    3、调度规则,即为代理服务器,这里是Nginx的服务器调度规则;
    4、动态服务器,其种类比较繁多,可以是Apache、Tomcat、IIS以及其它Web服务器,它们一般分别隶属于一台服务器;
     

    二、实现

    1、实现说明
    如上图所示,当客户端访问代理服务器时:
    首先,加载和显示存放在静态服务器中的静态资源,这里以html为例;
    其次,如果上一步没有匹配对应的资源,我们就认为是动态访问请求,那么就直接访问参与负载均衡的服务器列表中的某一台服务器的动态操作;
    最后,Nginx作为Web服务器加载静态资源(html、css、js、image),而静态资源如果需要动态获取数据,并填充到页面显示,会自动去往负载服务器获取并返回,在实现了动态分离的同时,也参与了服务器的负载均衡。
     
    2、准备工作
    准备两台计算机设备,分别为:
    静态服务器:169.254.195.161
    动态服务器:169.254.28.29
     
    3、安装配置
    首先,在静态服务器中安装Nginx服务器,在动态服务器中安装Apache服务器,具体安装过程中这里省略;
    其次,分别配置Nginx和Apache,配置如下:

    复制代码
     1 nginx.conf:
     2 http {
     3     #load balancing servers
     4     upstream webservers {
     5       ip_hash;
     6       server 169.254.28.29max_fails=2 fail_timeout=2;
     7    }
     8  
     9    server {
    10       listen       80;
    11       server_name  localhost;
    12      
    13       access_log/usr/local/nginx/logs/access.log;
    14       error_log/usr/local/nginx/logs/error.log;
    15      
    16       #limitbuffer size and overflows
    17       client_body_buffer_size16k;
    18       client_header_buffer_size1k;
    19       client_max_body_size1m;
    20  
    21       #default char set
    22       charset utf-8;
    23      
    24       #默认静态资源
    25       location / {
    26           root    /project/cwteam;
    27           index  index.html index.htm   
    28       
    29           allow all;
    30       }
    31       #动态资源加载
    32       location ~.(php|jsp)?$ {
    33           proxy_pass http://webservers;
    34       }
    35   }
    36 }
    复制代码

    httpd.conf:
    这里只罗列Apache根目录的配置路径,如下:

    复制代码
    1 DocumentRoot “D:/project/cwteam”
    2 <Directory “D:/project/cwteam”>
    3 Options IndexesFollowSymLinks Includes ExecCGI
    4 AllowOverride All
    5 Require all granted
    6 </Directory>
    复制代码

    最后,启动Nginx和Apache服务,并验证是否成功启动。

    三、验证

    首先,在静态服务器中的Web根目录下,放置一个static.html文件,内容如下:

    复制代码
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta charset="UTF-8">
     5 <script src="../Public/htmls/js/jquery-1.8.3.min.js"></script>
     6 </head>
     7 <body style="">
     8       <div id="ajaxDync"></div>
     9 </body>
    10  
    11 <script type="text/javascript">
    12 $(document).ready(function() {
    13       $.ajax({  
    14             url:'./dynamic.php?action=ok',  
    15             type:'get',  
    16             cache : false,
    17           success:function(data){  
    18               $("#ajaxDync").html(data);  
    19           }
    20       });
    21 });
    22 </script>
    23 </html>
    复制代码

    其次,在动态服务器中的Web服务器目录下放在一个动态脚本dynamic.php,内容如下:

    复制代码
     1 <?php
     2 if($_GET['action']=='ok'){
     3       echo 'Hello World!'.'---IP:169.254.28.29';
     4 }
     5 ?>
     6  
     7 NOTE:
     8 1、为了区分动静服务器内的服务器脚本,我们在静态服务器中的dynamic.php内容:
     9 <?php
    10 if($_GET['action']=='ok'){
    11       echo 'Hello World!'.'---IP:169.254.195.161';
    12 }
    13 ?>
    复制代码

    而在动态服务器中的dynamic.php内容如下:

    复制代码
    1 <?php
    2 if($_GET['action']=='ok'){
    3       echo 'Hello World!'.'---IP:169.254.28.29';
    4 }
    5 ?>
    复制代码

    2、需要保证动静服务器拥有同样的代码项目,一般使用rsync同步软件同步不同服务器中的项目资源文件,关于rsync会在后续总结介绍使用。
     
    最后,打开浏览器输入192.168.1.100,结果如下:

    从上图,我们知道动静已经分离成功了,因为静态资源页面html加载的是静态服务器的,而动态请求操作则访问的是动态服务器。

     

    转载于:https://www.cnblogs.com/dream98/p/10735995.html

    展开全文
  • nginx url重写

    2019-01-25 15:24:49
    注意:用url重写时, 正则里如果有”{}”,正则要用双引号包起来

    注意:用url重写时, 正则里如果有”{}”,正则要用双引号包起来

    展开全文
  • nginx URL重写

    2017-10-18 10:42:00
    Nginx系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html ...URL重写技术不仅要求掌握几个指令的语法、熟悉简单的正则表达式,还需要尽量熟悉nginx的各个变量的意义,熟悉的变量越多越好。大多数需要用到...
  • nginx url 重写NGINX rewrite rules are used to change entire or a part of the URL requested by a client. The main motive for changing an URL is to inform the clients that the resources they are looking...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,625
精华内容 650
关键字:

nginxurl重写