文件及目录匹配,其中:
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
样例 : 判断访问的图片是否存在,不存在跳转到另外的域名
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|thumb) {
root /data/wwwroot/bbs.xxx.com;
expires 10d;
if (!-e $request_filename) {
rewrite ^/data/attachment/forum/(.*)$ http://img.xxx.com/forum/$1 permanent;
}
}
这里会遇到一个问题:
nginx中重写rewrite的语法错误[emerg] unknown directive “if($host!=”
Nginx语法检测特别严格,if和后面括号以及变量等号这些元素都要有空格,所以正确的写法是:if ( $host != 'www.0xcafebaby.com' ){用^代替空格看起来更清晰:
rewrite ^(.*)$ http://www.0xcafebaby.com$1 permanent;
}
if^(^$host^!=^'www.0xcafebaby.com'^){反正多打几个空格就是了,所以nginx中的中文配置文件解释可参考:Nginx配置文件中文注释详解 如果想了解更多nginx的rewrite配置,可参考:nginx rewrite 的 参数大全