nginx – 没有爬虫/机器人的ssl

nginx中的端口80的服务器指令中,如果用户代理不是bot,我想将所有请求redirect到https。 我试着用这个:

... location / { if ($http_user_agent !~* (bot|spider|crawler|sniffer|facebook) ) { return 301 https://host.com$request_uri; } include other-stuff.inc; } 

我以为nginx将停止return但它不会。 它仍然处理include (它服务于正常的站点)并且不redirect。 (如果我评论include它做redirect,虽然)。 顺便说一句: break也行不通。

虽然nginxconfiguration的某些部分可能类似于程序代码,但实际上并不是这样。 该命令仅对于ifs(并非总是如此)和位置匹配很重要。 所以包括不是不被一些假设的指令指针parsing,至less在上面的情况下。 这是你的包含声明适用于任何比赛的原因。