将子域名转发(别名?重定向?路由?)到 Nginx 配置中的目录

将子域名转发(别名?重定向?路由?)到 Nginx 配置中的目录

我想要别名m.example.com,以便请求被转发/别名,example.com/m/但用户不会被重定向到/m/目录。

例如,用户访问m.example.comm.example.com/1.htmm.example.com/2.htm但 nginx 将请求转发/别名到example.com/m/example.com/m/1.htmexample.com/m/2.htm

我曾尝试使用rewrite指令,但这似乎执行了客户端重定向到example.com/m/

我也看过该alias指令,但这似乎只是修改了文件在服务器文件系统上的位置。

我确信这肯定是以前做过的,但我似乎无法解决这个问题。我是否在指令中使用了错误的标志alias(我已尝试了所有 4 个:lastbreakredirectpermanent)。我是否错过了要使用的正确指令?

使用重写的配置片段:

server_name       example.com m.example.com;

...

if ($host ~* m\.(.*))
{
    rewrite ^(.*)$ http://example.com/m$1 break;
}

另一次尝试:

server
{
    listen            80;
    server_name       m.example.com;

    location /
    {
        rewrite ^ http://example.com/m$request_uri permanent;
    }
}

提前致谢。

答案1

这在 Nginx 中是不可能的。您可以使用 m 子域,但您必须在该服务器块中将其传递给您的后端。这是因为 Nginx 无法在不使用实际 HTTP 重定向的情况下重写 URL,即使您告诉它,它也会忽略这一点并强制进行 HTTP 重定向。

但是,如果您使用 fastcgi 后端,那么这实际上并不重要,而且即使您将代理传递给 Apache,您仍然可以将其配置为不关心。

相关内容