nginx的url重写怎么用(nginx配置路径重写)

nginx的url重写怎么用(nginx配置路径重写)

浏览次数:
信息来源: 用户投稿
更新日期: 2026-04-17
文章简介

nginx之url重写摘要这个模块允许使用正则表达式重写uri(需pcre库),并且可以根据相关变量重定向和选择不同的配置。如果这个指令在server字段中指定,那么将在被请求的location

2025阿里云双十一服务器活动

nginx之url重写

摘要这个模块允许使用正则表达式重写uri(需pcre库),并且可以根据相关变量重定向和选择不同的配置。如果这个指令在server字段中指定,那么将在被请求的location确定之前执行,如果在指令执行后所选择的location中有其他的重写规则,那么它们也被执行。如果在location中执行这个指令产生了新的uri,那么location又一次确定了新的uri。这样的循环可以最多执行10次,超过以后nginx将返回500错误。

使用字段:server,location,if

完成当前设置的规则,停止执行其他的重写指令。

}

if

使用字段:server,location

注意:在使用if指令之前请查看ifisevilpage并且尽量考虑用try_files代替。

判断一个条件,如果条件成立,则后面的大括号内的语句将执行,相关配置从上级继承。

  • 可以在判断语句中指定下列值:

  • 一个变量的名称;不成立的值为:空字符传”“或者一些用“0”开始的字符串。

  • 一个使用=或者!=运算符的比较语句。

  • 使用符号~*和~模式匹配的正则表达式:

  • ~*不区分大小写的匹配(firefox匹配firefox)。

  • !~和!~*意为“不匹配的”。

  • 使用-f和!-f检查一个文件是否存在。

  • 使用-d和!-d检查一个目录是否存在。

  • 使用-e和!-e检查一个文件,目录或者软链接是否存在。

  • 使用-x和!-x检查一个文件是否为可执行文件。

  • 正则表达式的一部分可以用圆括号,方便之后按照顺序用$1-$9来引用。

    if($http_user_agent~msie){

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

    if($http_cookie~*"id=([^;]+)(?:;|$)"){

    if($request_method=post){

    if(!-f$request_filename){

    proxy_passhttp://127.0.0.1;

    rewrite^http://example.com/permanent;

    }

  • rewrite^(/download/.*)/media/(.*)\..*$$1/mp3/$2.mp3last;

    rewrite^(/download/.*)/audio/(.*)\..*$$1/mp3/$2.ralast;

    return403;

    但是如果我们将其放入一个名为/download/的location中,则需要将last标记改为break,否则nginx将执行10次循环并返回500错误。

    rewrite^(/download/.*)/media/(.*)\..*$$1/mp3/$2.mp3break;

    rewrite^(/download/.*)/audio/(.*)\..*$$1/mp3/$2.rabreak;

    }

    如果替换字段中包含参数,那么其余的请求参数将附加到后面,为了防止附加,可以在最后一个字符后面跟一个问号:

    rewrite^/users/(.*)$/show?user=$1?last;

    注意:大括号({和}),可以同时用在正则表达式和配置块中,为了防止冲突,正则表达式使用大括号需要用双引号(或者单引号)。例如要重写以下的url:

    /photos/123456

    为:

    /path/to/photos/12/1234/123456.png

    则使用以下正则表达式(注意引号):

    rewrite"/photos/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photos/$1/$1$2/$1$2$3.png;

    如果指定一个“?”在重写的结尾,nginx将丢弃请求中的参数,即变量$args,当使用$request_uri或$uri&$args时可以在rewrite结尾使用“?”以避免nginx处理两次参数串。

    在rewrite中使用$request_uri将www.example.com重写到example.com:

    server_namewww.example.com;

    rewrite^http://example.com$request_uri?permanent;

    }

    同样,重写只对路径进行操作,而不是参数,如果要重写一个带参数的url,可以使用以下代替:

    rewrite^http://example.com/new-address.html?permanent;

    }

    开启或关闭在未初始化变量中记录警告日志。

    事实上,rewrite指令在配置文件加载时已经编译到内部代码中,在解释器产生请求时使用。

    nginx的url重写怎么用,nginx配置路径重写

    rewrite^/(download/.*)/media/(.*)\..*$/$1/mp3/$2.mp3break;

    将被编译成以下顺序:

    checkingsofregularexcodession

    completionofregularexcodession

    completionofentiresequence

    如果$slow为真,对应的if块将生效,在这个配置中limit_rate的值为10k。

    rewrite^/(download/.*)/media/(.*)\..*$/$1/mp3/$2.mp3break;

    如果我们将第一个斜杠括入圆括号,则可以减少执行顺序:

    rewrite^(/download/.*)/media/(.*)\..*$$1/mp3/$2.mp3break;

    之后的顺序类似如下:

    checkingregularexcodession

    completionofregularexcodession

    completionofentirecode

    2.简单案例

    注,由于配置文件内容较多,为了让大家看着方便,我们备份一下配置文件,打开一个新的配置文件。

    [root@nginx~]#cd/etc/nginx/

    [root@nginxnginx]#mvnginx.confnginx.conf.proxy

    [root@nginxnginx]#cpnginx.conf.baknginx.conf

    [root@nginxnginx]#vim/etc/nginx/nginx.conf

    #access_loglogs/host.access.logmain;

    indexindex.htmlindex.htm;

    rewrite^/bbs/(.*)$http://192.168.18.201/forum/$1;

    }

    准备forum目录与测试文件

    [root@web1~]#cd/var/www/html/

    [root@web1html]#mkdirforum

    [root@web1forum]#vimindex.html

    <h1>forumpage!</h1>

    测试一下

    好了,下面我们来测试一下rewrite重写。

    [root@nginx63]#servicenginxreload

    nginx:theconfigurationfile/etc/nginx/nginx.confsyntaxisok

    nginx:configurationfile/etc/nginx/nginx.conftestissuccessful

    重新载入nginx:[确定]

    4.测试一下

    注,大家可以从图中看出,statuscode302指的是临时重定向,那就说明我们rewrite重写配置成功。大家知道302是临时重定向而301是永久重定向,那么怎么实现永久重定向呢。一般服务器与服务器之间是临时重定向,服务器内部是永久重定向。下面我们来演示一下永久重定向。

    [root@nginxnginx]#vim/etc/nginx/nginx.conf

    #access_loglogs/host.access.logmain;

    indexindex.htmlindex.htm;

    rewrite^/bbs/(.*)$/forum/$1;

    }

    准备forum目录与测试文件

    [root@nginx~]#cd/usr/html/

    [root@nginxhtml]#mkdirforum

    [root@nginxhtml]#cdforum/

    [root@nginxforum]#vimindex.html

    <h1>192.168.18.208forumpage</h1>

    6.重新加载一下配置文件

    [root@nginx~]#servicenginxreload

    nginx:theconfigurationfile/etc/nginx/nginx.confsyntaxisok

    nginx:configurationfile/etc/nginx/nginx.conftestissuccessful

    重新载入nginx:[确定]

    7.测试一下

    注,大家从图中可以看到,我们访问bbs/是直接帮我们跳转到forum/下,这种本机的跳转就是永久重定向也叫隐式重定向。

    以上就是nginx的url重写怎么用的详细内容,更多请关注主机测评网其它相关文章!

    标签:
  • 了解什么是DHCP服务器(什么是dhcp服务器)
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!