Nginx rewrite规则

目录:

  1. rewrite概念
  2. rewrite示例
rewrite概念

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

Rewrite URL 规则重写的用途:

  • 对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网站页面。
  • 隐藏网站 URL 真实地址,浏览器显示更加美观。
  • 网站变更升级,可以基于 Rewrite 临时重定向到其他页面。

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

rewrite 的优先级高于location



Nginx Rewrite 结尾标识符

用于 Rewrite 规则末尾,表示规则的执行属性。

last  :相当于 Apache 里的(L)标记,表示完成 rewrite 匹配。
break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。 
redirect:返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址。
permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址。
其中 last 和 break 用来实现 URL 重写时,浏览器地址栏 URL 地址不变。

Nginx Rewrite 规则常用表达式

主要用于匹配参数、字符串及过滤设置和正则差不多。

.	匹配任何单字符;

[word]	匹配字符串:word;

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

jeff|jeff1	可选择的字符串:jeff或jeff1;

?	匹配 0 到 1 个字符;

*	匹配 0 到多个字符;

+	匹配 1 到多个字符;

^	字符串开始标志;

$	字符串结束标志;

\n	转义符标志。

Nginx Rewrite 变量

常用于匹配 HTTP 请求头信息、浏览器主机名、URL 等。

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	日;

回到目录



rewrite示例

Nginx Rewrite 以下配置均配置在 nginx.conf 或者 vhosts.conf 中

  1. 将 jeff.net 跳转至 www.jeff.net。
if ($host = 'jeff.net' ) {
	rewrite ^/(.*)$ http://www.jeff.net/$1 permanent;
}
  1. 访问 www.jeff.net 跳转 www.test.com/new.index.html。
rewrite	^/$	http://www.test.com/index01.html permanent;
  1. 访问/jeff/test01/跳转至/newindex.html,浏览器地址不变。
rewrite	^/jeff/test01/$ /newindex.html last;
  1. 多域名跳转到 www.jeff.net。
if ($host != ‘www.jeff.net’ ) {
	rewrite ^/(.*)$ http://www.jeff.net/$1 permanent;
}
  1. 访问文件和目录不存在跳转至 index.php。
if ( !-e $request_filename ) {
	rewrite	^/(.*)$ /index.php last;
}
  1. 目录对换 /xxxx/123456 ====> /xxxx?id=123456。
rewrite	^/(.+)/(\d+) /$1?id=$2 last;
  1. 判断是IE浏览器 User Agent 跳转。
if( $http_user_agent	~ MSIE) {
	rewrite ^(.*)$ /ie/$1 break;
}
  1. 禁止访问以.sh,.flv,.mp3 为文件后缀名的文件。
location ~ .*\.(sh|flv|mp3)$ {
	return 403;
}
  1. 将移动用户访问跳转至移动端。
if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" ) {
   rewrite ^/$	http://m.jfedu.net/	permanent;
}
  1. 匹配 URL 访问字符串跳转。
if ($args ~* tid=13) { 
	return 404;
}
  1. 访问/10690/jeff/123 跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+表示多个,(.+)表示任何多个字符。
rewrite	^/([0-9]+)/jeff/(.+)$ /index.php?tid/$1/items=$2 last;

回到目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值