我想要别名m.example.com
,以便请求被转发/别名,example.com/m/
但用户不会被重定向到/m/
目录。
例如,用户访问m.example.com
、m.example.com/1.htm
,m.example.com/2.htm
但 nginx 将请求转发/别名到example.com/m/
、example.com/m/1.htm
和example.com/m/2.htm
。
我曾尝试使用rewrite
指令,但这似乎执行了客户端重定向到example.com/m/
。
我也看过该alias
指令,但这似乎只是修改了文件在服务器文件系统上的位置。
我确信这肯定是以前做过的,但我似乎无法解决这个问题。我是否在指令中使用了错误的标志alias
(我已尝试了所有 4 个:last
、break
、redirect
、permanent
)。我是否错过了要使用的正确指令?
使用重写的配置片段:
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,您仍然可以将其配置为不关心。