在Nginx配置中使用尾部斜杠


8
    location /product {
        proxy_pass http://10.0.0.25:8080;
    }

如果我使用产品文件夹的第一个位置描述,则应该使用http://mysdomain.com/product/,但不能http://mysdomain.com/product在浏览器中使用 。我的意思是我应该使用url的斜杠结尾。我想以两个状态访问产品文件夹。

之间有什么区别:

    location /product/ {
        proxy_pass http://10.0.0.25:8080;
    }

Answers:


10

这些位置是不同的。/production例如,第一个匹配,可能与您预期的不匹配。因此,我更喜欢使用带有斜杠的位置。

另外,请注意:

如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass或memcached_pa​​ss中的一个处理,则响应URI等于此字符串的请求,但不包含末尾斜杠,带有代码301的永久重定向将返回到请求的URI,并附加斜杠。

如果您有类似的东西:

location /product/ {
    proxy_pass http://backend;
}

然后转到http://example.com/product,nginx会自动将您重定向到http://example.com/product/

即使您不使用上述指令之一,也可以始终手动进行重定向:

location = /product {
    rewrite ^ /product/ permanent;
}

或者,如果您不想重定向,则可以使用:

location = /product {
    proxy_pass http://backend;
}

我正在使用proxy_pass myip:8080 / product,然后将这个地址称为浏览​​器。浏览器将我重定向到myip / product,并显示错误页面无法查看。
barteloma 2014年

使用反引号进行编码。Markdown解析了您的注释,很难找出您的代码真正是什么。
Alexey 2014年

谢谢,重要的是要知道,如果添加了/ product /,那么即使浏览器将其发送给/ product,也必定会从服务器接收301。确实是很有效的。
Sur Max

3

不,它们是不一样的-您将需要在正则表达式后使用斜杠来匹配两者,即

location ~ /product/?

有关如何匹配整个URL的更详细的响应,请参见此相关答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.