URL重写

摘抄了了张宴一本书上的URL重写规则,算是复习一下吧;

nginx URL 重写
1,ngin中的URL 重写主要是使用perl的正则表达式,这也是为什么安装Nginx的时候,要制定PCRE的原因。
2,Nginx Rewrite 规则相关指令
Nginx 重写规则的主要指令是if ,rewrite,set,return break 等,而rewrite是最重要的指令,
例:

rewirte ^/b/(.*)\.html /play.php?video=$1 break;


可以这样子理解上面的例子:


指令      匹配规则          动作
rewirte   ^/b/(.*)\.html   /play.php?video=$1 break;  ;是Nginx 默认的结尾符号
上面的重写规则 匹配开头 /b/目录下任何html 请求 重写到对应的 /play.php?video=html名称 break;


另外一个例子 IF
if (!-f $request_filename)
	{
	rewrite ^/img/(.*)$ /site/$host/images/$1 last;
	}


其中 $request_filename $host为内置变量  $1 是前面()内的配置 后向引用


2.1 break 指令
语法 break
使用环境:server,location,if
该命令作用是完成当前规则集,不再处理后面的rewrite指令
例:
if ($slow) {
	limit_rate 10k;
	break;
	}

2.2 if
语法 if (condition) {........}
使用环境 server,location
该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。if指令不支持嵌套
,不支持多个条件&&和||处理。
以下信息可以指定为条件:
1,变量名,错误的值包括:空字符串“”,或者任何以0开始的字符串;
2,变量比较可以使用“=” != 运算符;
3,正则表达式模式匹配可以使用 ~*(不区分大小写) ~ (区分大小写)
4,!取反操作符,如 !~ !~* 
5,-f !-f 判断文件是否存在
6,-d !-d判断文件或目录是否存在
7,-x !-x来判断文件是否可执行
放在()内的正则表达式 可以使用$1至$9 引用
例:
if ($http_user_agent ~ MSIE) {
	rewrite ^(.*)$ /msie/$1 break;
	}


if ($htto_cookie ~* "id=([^;] +)(?:;|$)") {
	set $id $1;
	}


if ($request_method = POST) {
	return 405;
	}


if (!-f $request_filename) {
	break;
	proxy_pass http://127.0.0.1;
	}
	
if ($slow) {
	limit_rate 10k;
	break;
	}
	
if ($invalid_referer) {
	return 403;
	}
	
if ($args ^~ post=140) {
	rewrite ^ http://example.com/permanent;
	}



3 return 
语法:return code
使用环境: server,location,if

location ~ .*\.(sh|bash)?$
	{
	return 403;
	}


2.4 rewrite 
语法 rewrit regex replancement flag
使用环境: server,location,if
该指令根据表达式来重定向URL或者修改字符串,指令根据配置文件中的顺序来执行。
重写表达式只对相对路径有效,
其中flag 标记指的是last break redirect permanent
区别如下:
last 相当于apache里面的[L] 标记,表示完成rewrite;
break 本条规则匹配完成后,终止匹配,不再匹配后面的规则;
redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
2.5set 指令
语法: set variable valus
使用环境: server,location,if
该指令用于定义一个变量,并给变量赋值,变量的值可以为文本,变量及文本变量的联合
实例如下:
set $varname 'hello'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值