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


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一切正常。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>