nginx转发网址没有显示最终结果

时间:2013-10-24 22:21:23

标签: nginx rewrite

我正试图通过以下方式转发我的域(cafe.com)上的所有传入流量:

  

if($ host ='coffee.cafe.com'){                   重写^ /(。*)$ https://www.cafe.com/homepage/?path=coffee永久;               }

     

if($ host ='tea.cafe.com'){                   重写^ /(。*)$ https://www.cafe.com/homepage/?path=tea永久;               }

虽然这很好,但我不希望访问者看到整个“主页/?path = coffee”部分。有没有办法让我在URL中隐藏“homepage /?path = coffee”?并只显示coffee.cafe.com或tea.cafe.com(他们最初输入的URL)

提前感谢所有帮助:)

1 个答案:

答案 0 :(得分:0)

首先,你应该理解'重写'和'重定向'之间的区别,重写意味着在服务器端修改uri而不需要用户的另一个请求,重定向意味着服务器端返回一个新的url并要求客户端启动这个新网址的新请求。 manual重定向指令。

在这里,您使用带有'http://'和'permanent'修饰符的重写指令。这意味着301重定向,这要求客户端发布具有特定URL的新请求,因此,用户将看到新的URL。

您应该更改配置文件,确保虚拟主机接受所有这些主机

server {
    listen **;
    server_name .cafe.com;
    .....
}

然后,'tea.cafe.com'或'coffee.cafe.com'或'www.cafe.com'与服务器相同。如果你想为不同的主机做一些不同的事情,你可以使用:

if ($host = 'coffee.cafe.com' ) { 
    rewrite ^/(.*)$ /homepage?path=coffee break; 
}
if ($host = 'tea.cafe.com' ) { 
    rewrite ^/(.*)$ /homepage?path=tea break; 
}

请注意,目标网址和“break”修饰符中没有“http://”。