nginx 判断访问文件或目录不存在rewrite
文件及目录匹配,其中:
* -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 的 参数大全