+
95
-

回答

在 Nginx 中,可以通过配置 server 块来实现根目录重定向到子目录,同时保留子目录及其下的文件路径不变。具体来说,你可以使用 location 指令来匹配不同的路径,并设置重定向规则。

下面是一个示例配置:

server {
    listen 80;
    server_name a.com;

    # 根目录重定向到 b.com
    location = / {
        return 302 http://b.com;
    }

    # 处理所有其他请求
    location / {
        # 这里可以添加你的其他配置,如代理转发、静态文件服务等
        # 例如,代理请求到后端服务器
        # proxy_pass http://backend;

        # 或者提供静态文件服务
        # root /path/to/your/static/files;
    }
}
配置说明location = /:这个配置块仅匹配根目录请求,即 a.com,并返回 302 重定向到 b.com。location /:这个配置块匹配除根目录之外的所有请求。可以在这个块内配置静态文件服务或反向代理。完整示例

假设你有一个简单的静态文件服务器设置,同时希望根目录重定向到 b.com,可以如下配置:

server {
    listen 80;
    server_name a.com;

    # 根目录重定向到 b.com
    location = / {
        return 302 http://b.com;
    }

    # 对其他路径提供静态文件服务
    location / {
        root /path/to/your/static/files;
        try_files $uri $uri/ =404;
    }
}
解释root /path/to/your/static/files;:指定静态文件的根目录。try_files $uri $uri/ =404;:尝试按顺序访问请求的文件或目录,如果都不存在则返回 404。

这样配置后,访问 a.com 会重定向到 b.com,而访问 a.com/b.html 或 a.com/b/ 会正常处理,不会重定向。

代理请求

如果你的应用涉及到反向代理,可以将 location / 块配置成如下:

server {
    listen 80;
    server_name a.com;

    # 根目录重定向到 b.com
    location = / {
        return 302 http://b.com;
    }

    # 反向代理其他路径到后端服务器
    location / {
        proxy_pass http://your_backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
结论

通过以上配置,你可以实现根目录重定向到另一个域,同时保留其他路径的正常访问。在 location 指令中灵活配置匹配规则和处理方式,可以满足大部分应用场景的需求。

网友回复

我知道答案,我要回答