Nginx之 – Rewrite

都知道使用apache的时候可以使用.htaccess进行为静态的重定向配置。

nginx也可以,单略有不同

首先在

/etc/nginx/nginx.conf文件内
相应的server{} 中加入以下代码,然后我们就可以在nginx.htaccess中编写rewrite规则了。
include nginx.htaccess;

ngixn rewrite 的相关指令有:if rewrite set return break等。
看个简单的例子:

if (host ~* ^(.*?)\.sgfblog\.com) {
set var_host '1';
}
if (host ~* ^192\.168\.1\.(.*?)) {
setvar_host '1';
}
if (host ~* ^localhost) {
setvar_host '1';
}
if (host ~* ^127\.0\.0\.(.*?)) {
set var_host '1';
}
if (var_host !~ '1') {
rewrite ^/(.*)scheme://www.sgfblog.com/$1 redirect;
}

解释一下上述语句的意思:

上面4个if语句都是只有有一个成立就会使用set 把一个变量设置成1
最后1个语句 只要这个变量为1,就执行重定向。

host 指的是主机名,也就是访问网址。

如果主机名不是*.sgfblog.com也不是192.168.1.*也不是localhost也不是127.0.0.*
那么将执行跳转。

rewrite ^/(.*) scheme://www.sgfblog.com/1 redirect;
/(.*)可以匹配根任意字符路径,scheme://www.sgfblog.com/1 则是被重定向到地址scheme 代表协议 可以说http 或 https等
$1 代表匹配时第1处符合的字符串 ,也就是原路径。

redirect代表302重定向,会在url头里改变。

if语句解说


1、变量名不能为空值或者0开头
2、可以使用等于号(=),不等于号(!=)来运算
3、可以使用正则 ~*(不区分大小写) 和 ~(区分大小写)进行匹配
4、!~和 !~*表示不匹配
5、-f 和!-f 表示文件是否存在
6、-d 和 !-d 表示目录是否存在
7、-x 和 !-x表示是否可以执行

支持的flag标签有


标签 解释
last apache中的[L]表示完成rewrite
break 终止匹配
permanent 301
redirect 302

retrun用法


语法:

return code
code 解释
204 no content
400 bad request
402 payment requied
403 forbidden
404 not found
405 methid not allowed
406 not acceptable
408 request timeout
410 gone
411 length required
413 request entiry too large
416 request rang not satisfiable
500 internal server error
501 not implemented
502 bad gateway
503 service unavailable
504 gateway timeout

支持的全局变量有

  • $args
  • $content_length
  • $content_type
  • $document_root
  • $document_uri
  • $host
  • $http_user_agent
  • $http_cookie
  • $limit_rate
  • $request_nody_file
  • $request_mothod
  • $remote_addr
  • $remote_port
  • $remote_user
  • $remote_filename
  • $request_uri
  • $query_string
  • $server_protocol
  • $server_addr
  • $server_name
  • $server_port
  • $uri

相关链接