![如果用户代理包含 XYZ,则 NGINX 重定向](https://linux22.com/image/707991/%E5%A6%82%E6%9E%9C%E7%94%A8%E6%88%B7%E4%BB%A3%E7%90%86%E5%8C%85%E5%90%AB%20XYZ%EF%BC%8C%E5%88%99%20NGINX%20%E9%87%8D%E5%AE%9A%E5%90%91.png)
我已将我的网站从 http 重定向到 https。我想允许用户代理XYZ和XYZ 随便输入 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;
}