如果用户代理包含 XYZ,则 NGINX 重定向

如果用户代理包含 XYZ,则 NGINX 重定向

我已将我的网站从 http 重定向到 https。我想允许用户代理XYZXYZ 随便输入 http 和 https 版本。

现在虚拟主机如下所示:

server {
        listen 80;
        server_name example.com www.example.com;
        rewrite  ^/(.*)$  https://www.example.com/$1 permanent;
}

我该如何编辑它,以便允许包含 XYZ 的代理同时查看 HTTP 和 HTTPS?换句话说...如何禁用此类代理的重定向?

我试过

if ($http_user_agent ~* "^XYZ$") {
   rewrite ^/(.*)$ https://www.example.com/$1 permanent;
}

但这似乎只重定向了 XYZ。但如果是 XYZ(不是严格的 XYZ,而是包含 XYZ),我需要禁用重定向...

答案1

使用 ~* 时,您尝试松散地匹配字符串,但您的正则表达式是 ^XYZ$,它表示只有当字符串以 XYZ 开头并以 XYZ 结尾时才匹配。这根本不是松散的。您在这里有点自相矛盾。

请参阅此处的文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

您可能希望调整正则表达式以允许更多变化。从您的问题来看,我们很难知道您想要匹配什么。可能是这样的:

if ($http_user_agent ~* ".*XYZ.*") {
   rewrite ^/(.*)$ https://www.example.com/$1 permanent;
}

相关内容