nginx rewrite 常见设置

由于希望服务器路径不被访问所知道,所以做了伪静态

 

if ($host ~* ^([^\.]+)\.([^\.]+\.[^\.]+)$)  {

}   #这个是域名的一个规则,通过这个规则把域名分为二段分组,这样就可以取出第一个分组(获取二级域名)

 

 

              在server块下,会优先执行rewrite部分,然后才会去匹配location块

              server中的rewrite break和last没什么区别,都会去匹配location,所以没必要用last再发起新的请求,可以留空



location中的rewirte:



              不写last和break     那么流程就是依次执行这些rewrite

              rewrite break         url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变

              rewrite last           url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变

              rewrite redirect       返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时)

              rewrite permanent     返回301永久重定向, 地址栏显示重定向后的url,爬虫更新url

.

              使用last会对server标签重新发起请求

              如果location中rewrite后是对静态资源的请求,不需要再进行其他匹配,一般要使用break或不写,直接使用当前location中的数据源,完成本次请求

              如果location中rewrite后,还需要进行其他处理,如动态fastcgi请求(.php,.jsp)等,要用last继续发起新的请求

              (根的location使用last比较好, 因为如果有.php等fastcgi请求还要继续处理)
~      为区分大小写的匹配。

~*     不区分大小写的匹配(匹配firefox的正则同时匹配FireFox)。

!~     不匹配的

!~*    不匹配的

.     匹配除换行符以外的任意字符

\w     匹配字母或数字或下划线或汉字

\s     匹配任意的空白符

\d     匹配数字

\b     匹配单词的开始或结束

^     匹配字符串的开始

$     匹配字符串的结束

*     重复零次或更多次

+     重复一次或更多次
\W     匹配任意不是字母,数字,下划线,汉字的字符

\S     匹配任意不是空白符的字符

\D     匹配任意非数字的字符

\B     匹配不是单词开头或结束的位置

[^x]     匹配除了x以外的任意字符

[^aeiou]     匹配除了aeiou这几个字母以外的任意字符



捕获     (exp)     匹配exp,并捕获文本到自动命名的组里

(?<name>exp)     匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

(?:exp)     匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言     (?=exp)     匹配exp前面的位置

(?<=exp)     匹配exp后面的位置

(?!exp)     匹配后面跟的不是exp的位置

(?<!exp)     匹配前面不是exp的位置

注释     (?#comment)     这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读


当一个域名内容url需要访问另一个域名url内容,而且还想返回到浏览的状态为200,这时候下面的方法就可以解决了

location ^~ /xxx/dangan_search {
proxy_pass http://www.xxx.com/$uri$is_args$args;
}

location ^~ /xxx/exponent {
proxy_pass http://www.xxx.com/$uri$is_args$args;
}

 

posted @ 2015-01-19 18:48  zenghui940  阅读(709)  评论(0编辑  收藏  举报