如何通过 Nginx 运行 WordPress 网站,并从特定目录提供静态文件

如何通过 Nginx 运行 WordPress 网站,并从特定目录提供静态文件

我有一个在 Nginx 上运行的 WordPress 网站。在我的配置中,我有一个如下位置块:

location / {
    try_files $uri $uri/ /index.php?$args;
}

我想要的是有一个包含静态内容的特殊目录。如果 URL 与静态目录中的文件匹配,我希望提供该文件而不是 Wordpress 内容。

我不会提前知道文件的名称。

我尝试将我的位置块更改为

location / {
    try_files /static/$uri /static/$uri/ $uri $uri/ /index.php?$args;
}

这基本上可以满足我的要求(只要是static下的目录$document_root),但它会重写访问者看到的 URL。如果可能的话,我想避免这种情况。例如,避免https://example.com/catalog.php重定向到https://example.com/static/catalog.php。我只希望 Nginx 在访问者不知情的情况下从静态提供内容。


我可能没有表达得特别清楚。

我的 WordPress 内容位于/srv/www/mysite/html并且我的 Nginx 配置大致如下:

server {
    root /srv/www/mysite/html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}

我有另一个文件夹,/home/dave/static里面有任意内容。假设它有一个名为的文件catalog.html。如果访问者访问https://example.com/catalog.html,我希望从中获取内容/home/dave/static/catalog.html。如果没有匹配的静态文件,我希望回退到 WordPress 内容。

以下是我在此期间尝试过的其他方法:

server {
    root /srv/www/mysite/html;

    location / {
        root /home/dave/static;
        try_files $uri $uri/ @fallback;
    }
    location @fallback {
        try_files $uri $uri/ /index.php?$args;
    }
}

此配置不起作用。它似乎无法识别任何静态内容,仅提供 WordPress 内容。

相关内容