16、Nginx-重写与重定向

为了能够在修改网站结构或域名后,避免造成网站中的链接或在其他网站中的外链失效,已经提高网站在搜索引擎的收录量和排名等目的,通常会采用url重写与重定向,在增强网站专业化的同时,为用户提供更加舒适的使用体验。

1、rewrite模块的介绍

重写与重定向功能是现在大多数Web服务器都支持的一项功能,相对于其他产品而言,Nginx中的rewrite模块提供的功能在配置上更加灵活自由,可定制性非常高,它的实现方式简单,只需要通过rewrite指令根据Nginx提供的全局变量或自定义的变量,结合正则表达式已经进一步处理的标识就可以完成url重写或重定向。

2、rewrite实现重写

rewrite指令基本语法:

rewrite regex replacement [flag];

flag可选参数值:

  • last:终止rewrite,继续匹配其他规则;

  • break:终止rewrite,不再继续匹配;

  • redirect:临时重定向,返回的HTTP状态码为302;

  • permanent:永久重定向,返回的HTTP状态码为301;

当flag值为last或break时,表示当前的设置为重写,当flag的值为redirect或permanent时表示重定向;

2.1、添加rewrite指令

16、Nginx-重写与重定向

if与括号有空格,!-e与$request_filename有空格;

!-e用于判断不存在指定的文件或目录时,执行if块内的语句,内置变量$request_filename表示当前请求的文件路径;

^/.*用于匹配当前网站下的所有请求;

/default/default.html用于替换符合指定规则的请求;

if指令判断符号:

  • =:判断变量与内容相同;

  • !=:判断变量与内容不等;

  • ~:区分大小写正则匹配;

  • ~*:不区分大小写正则匹配;

  • !~:区分大小写正则不匹配;

  • !~*:不区分大小写正则不匹配;

  • -f:判断文件存在;

  • !-f:判断文件不存在;

  • -d:判断目录存在;

  • !-d:判断目录不存在;

  • -e:判断文件或目录存在;

  • !-e:判断文件或目录不存在;

  • -x:判断可执行文件;

  • !-x:判断不可执行文件;

测试验证:

在网站根目录下创建default目录,并在改目录下编写default.html文件:

16、Nginx-重写与重定向

重启访问一个不存在的文件

16、Nginx-重写与重定向

2.2、break和last标识的区别

在使用rewrite实现重写时,需要注意flag可选参数值break和last的区别,前者在rewrite指令匹配成功后就不再进行匹配,而 后者在rewrite后会根据rewrite匹配的规则重新发起一个请求继续进行匹配。

设置匹配规则:

16、Nginx-重写与重定向

重启访问

16、Nginx-重写与重定向

16、Nginx-重写与重定向

16、Nginx-重写与重定向

3、rewrite实现重定向

rewrite的重定向就是将用户访问的url修改为重定向的地址,只需将flag的可选参数值设置为redirect或permanent即可实现。

16、Nginx-重写与重定向

利用set指令为变量$name赋值,$1表示符合正则表达式第一个字模式的值,子模式([0-9]+)匹配到的值;

用户请求http://test.ng.test/img-数字.jpg时,重定向到http://test.ng.test/img/数字.jpg;

16、Nginx-重写与重定向


分享到:


相關文章: