Nginx_Rewrite规则配置

Rewirte规则也称为规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言。通常而言,几乎所有的WEB服务器均可以支持URL重写。Rewrite URL规则重写的用途:

1.对搜索引擎优化(Search EngineOptimization,SEO)友好,利于搜索引擎抓取网站页面;

2.隐藏网站URL真实地址,浏览器显示更加美观;

3.网站变更升级,可以基于Rewrite临时重定向到其他页面。

Nginx Rewrite规则使用中有三个概念需要理解,分别是:Rewrite结尾标识符、Rewrite规则常用表达式、NginxRewrite变量,如下为三个概念的详解:

(1)          Nginx Rewrite结尾标识符,用于Rewrite规则末尾,表示规则的执行属性。

last :相当于Apache里的(L)标记,表示完成rewrite匹配;

break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。 

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

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

其中last和break用来实现URL重写时,浏览器地址栏URL地址不变。

(2)          Nginx Rewrite规则常用表达式,主要用于匹配参数、字符串及过滤设置。

.                                                      匹配任何单字符;

[word]                                              匹配字符串:word;

[^word]                                         不匹配字符串:word;

jfedu|jfteach                                   可选择的字符串:jfedu|jfteach;

?                                                      匹配0到1个字符;

*                                                      匹配0到多个字符;

+                                                     匹配1到多个字符;

^                                                      字符串开始标志;

$                                                      字符串结束标志;

\n                                                     转义符标志。

(3)          Nginx Rewrite变量,常用于匹配HTTP请求头信息、浏览器主机名、URL等。

HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST, HTTP_ACCEPT;

connection & request: REMOTE_ADDR, QUERY_STRING;

server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL;

system stuff: TIME_YEAR, TIME_MON, TIME_DAY。

详解如下:

HTTP_USER_AGENT                用户使用的代理,例如浏览器;

HTTP_REFERER                       告知服务器,从哪个页面来访问的;

HTTP_COOKIE                       客户端缓存,主要用于存储用户名和密码等信息;

HTTP_HOST                              匹配服务器ServerName域名;

HTTP_ACCEPT                          客户端的浏览器支持的MIME类型;      

REMOTE_ADDR                    客户端的IP地址

QUERY_STRING                       URL中访问的字符串;

DOCUMENT_ROOT                   服务器发布目录;

SERVER_PORT                          服务器端口;

SERVER_PROTOCOL                服务器端协议;

TIME_YEAR                             年;

TIME_MON                               月;

TIME_DAY                                日;

(4)          Nginx Rewrite以下配置均配置在nginx.conf或者vhosts.conf中,企业中常用的Nginx Rewrite案例如下:

1.        将jfedu.net跳转至www.jfedu.net。

if ($host = 'jfedu.net' ) {

        rewrite ^/(.*)$ http://www.jfedu.net/$1  permanent;

}

2.        访问www.jfedu.net跳转www.test.com/new.index.html

rewrite   ^/$  http://www.test.com/index01.html  permanent;

3.        访问/jfedu/test01/跳转至/newindex.html,浏览器地址不变。

rewrite   ^/jfedu/test01/$     /newindex.html     last;

4.        多域名跳转到www.jfedu.net。

if ($host != ‘www.jfedu.net’ ) {

rewrite ^/(.*)$  http://www.jfedu.net/$1  permanent;

}

5.        访问文件和目录不存在跳转至index.php。

if ( ! -e $request_filename )
{
rewrite  ^/(.*)$  /index.php  last;
}

6.        目录对换 /xxxx/123456  ====> /xxxx?id=123456。

rewrite    ^/(.+)/(\d+)      /$1?id=$2       last;

7.        判断浏览器User Agent跳转。

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

8.        禁止访问以.sh,.flv,.mp3为文件后缀名的文件。

location ~ .*\.(sh|flv|mp3)$
{
       return 403;

9.        将移动用户访问跳转至移动端。

if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" )

{

rewrite ^/$      http://m.jfedu.net/       permanent;

}

10.    匹配URL访问字符串跳转。

if ($args ~* tid=13){

 return 404;

}

11.    访问/10690/jfedu/123跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+表示多个,(.+)表示任何多个字符。

rewrite   ^/([0-9]+)/jfedu/(.+)$     /index.php?tid/$1/items=$2     last;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值