为特定用户代理提供静态文件

为特定用户代理提供静态文件

我有以下配置:

server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    return 302 https://$server_name$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl        on;
    ssl_certificate         /etc/ssl/certs/cert.pem;
    ssl_certificate_key     /etc/ssl/private/cert.pem;

    server_name example.com;

    root /var/www/example;
    index index.html;


    location / {
            if ( $http_user_agent = "Dinosaur" ) {
                rewrite https://example.com/ https://example.com/example.gif;
            }
            try_files $uri $uri/ =404;
    }
}

在向根发出的请求中https://example.com,我希望提供 index.html。但是,如果请求是通过特殊用户代理发出的,那么我希望它直接提供 example.gif 文件(而不是 301 或 302 重定向到https://example.com/example.gif网址)。

我该怎么做?重写似乎不起作用。该try_files指令在上下文中不起作用if,这对于检查用户代理条件可能是必要的,也可能不是必要的。

答案1

的根的正确位置语句https://example.comlocation = /。该location /语句匹配任何未被其他位置块处理的 URI。请参阅这个文件了解详情。

你的rewrite说法完全错误。参见这个文件了解详情。

测试的值$http_user_agent是通过if块来完成的。~如果=包含“恐龙”而不是完全匹配。此外,if块内的语句应限于rewrite...lastreturn。请参阅这个文件了解详情。

location / {
    try_files $uri $uri/ =404;
}
location = / {
    if ( $http_user_agent ~ "Dinosaur" ) {
        rewrite ^ /example.gif last;
    }
}

如果if未采取阻止措施,则默认操作是处理该index语句并提供该index.html文件。

相关内容