Nginx SEO的条件预渲染页面(如果+ try_files)

时间:2018-08-14 06:23:41

标签: nginx nginx-reverse-proxy

出于SEO的目的,我有一个渲染服务器,它将为googlebot提供完全渲染的网页。

IF UA is googlebot THEN proxy pass to rendering server ELSE serve page normally

现在的问题是,当我将iftry_files混合在一起时,它将永远无法工作。

如何将以下配置更改为与上述逻辑相同的内容?

location ~ ^/web/(.*) {
    if ($http_user_agent ~* "googlebot|bingbot|yandex") {
        proxy_pass http://render.domain.com;
        break;
    }

    try_files $uri /project/$1 /project/dist/$1;
}

1 个答案:

答案 0 :(得分:1)

在该配置中,您有两个正则表达式。 nginx遇到新的正则表达式时,它将重置编号的捕获。

因此,尽管您期望$1location语句的捕获,但实际上它是if语句的空捕获。

您可以改用命名捕获。例如:

location ~ ^/web/(?<name>.*) {
    if (...) { ... }    
    try_files $uri /project/$name /project/dist/$name;
}