小虾虎鱼

小虾虎鱼

nginx: [emerg] unknown directive "if($host" in

作者 禾惠 发表于 2015/01/08,最后修改于 2015/01/08

Nginx接触也有一段时间,但用的过程中都只是一些简单的配置,基本上都是百度后照葫芦画瓢。昨天在写301重定向时就遇到了一个很郁闷的问题。

我参考我所下载的Nginx手册中的Nginx Redirect所介绍的域名全跳转的方法,上面的写法如下(只做了域名的修改):

server {
	listen	80;
	server_name xiaoboy.com www.xiaoboy.com;
	root	/home/web;
	if($host !~ "www\.xiaoboy\.com$") {
		rewrite ^(.*) http://www.xiaoboy.com$1 permanent;
	}
}

然后service nginx reload,Nginx就报出如下的错误:

nginx: [emerg] unknown directive "if($host" in...

对照手册看了很久,真的没有写错,可为什么报错?百度搜索了一会,终于找到原因了,原来Nginx对语法的格式还是比较严格的,"if($host"之间需要空格隔开("if ( $host",后面的也一样),所以正确的写法应该是(注意代码第5行空格的变化):

server {
	listen	80;
	server_name xiaoboy.com www.xiaoboy.com;
	root	/home/web;
	if ( $host !~ "www\.xiaoboy\.com$" ) {
		rewrite ^(.*) http://www.xiaoboy.com$1 permanent;
	}
}

最后service nginx reload一切正常。