标签存档: .htaccess

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\.(.*?)$) {
set $var_host '1';
}
if ($host ~* ^localhost) {
set $var_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

继续阅读 »