用于 SEO 的 nginx 条件预渲染页面(if + try_files)

nginx conditional pre-render pages for SEO(if + try_files)

出于 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/ /project/dist/;
}

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

因此,虽然您期望 </code> 是来自 <code>location 语句的捕获,但它实际上是来自 if 语句的空捕获。

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

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