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

Pik*_*ikk 0 nginx 301-redirect

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

现在虚拟主机看起来像这样:

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

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

我试过

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

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

Jay*_*Tee 5

使用 ~* 您试图松散地匹配字符串,但您的正则表达式是 ^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;
}
Run Code Online (Sandbox Code Playgroud)