Nginx 将特定路径重定向到 Wordpress 之外的子域

Nginx 将特定路径重定向到 Wordpress 之外的子域

我有一个主要网站使用WordPress 的供电Nginx(使用 HTTPS https://example.com)并且我需要将特定路径重定向到另一台服务器,响应子域http://files.example.com(无 SSL)。

无论我尝试什么,重写或重定向 301,我都会进入 Wordpress 的 404 错误页面。我认为我无法在我的 Nginx 配置中超出 Wordpress 的位置:

server {
    listen            443 ssl;
    listen            [::]:443;
    server_name       example.com;

    root              /var/www/wordpress;
    index             index.php index.html index.htm;

    access_log        /var/log/nginx/example.access.log;
    error_log         /var/log/nginx/example.error.log;

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

    if (!-e $request_filename){
        rewrite ^/(.*)$ /index.php break;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log    off;
    }

    location ~ \.php$ {
        include       fastcgi.conf;
        fastcgi_pass  php-wp;
    }

    location /files {
        rewrite ^/files(.*)$ http://files.example.com/files$1 redirect;
    }
}

答案1

这个if区块

if (!-e $request_filename){
    rewrite ^/(.*)$ /index.php break;
}

将重写对文件夹中缺少的任何文件的任何请求/var/www/wordpress到 WordPress index.php。 完全不需要此if块,请将其删除。 最后一个参数try_files指令可以是新的 URI 或 HTTP 错误代码,但您尝试同时使用两者。请将您的根位置块更正为

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

对于重定向,你不需要单独的location块,只需使用

rewrite ^/files http://files.example.com$request_uri redirect;

对于 HTTP 302 临时重定向或

rewrite ^/files http://files.example.com$request_uri permanent;

用于 HTTP 301 永久重定向。

相关内容