server {
listen 0.0.0.0:80;
server_name localhost 127.0.0.1;
location /en-us/ {
return 301 http://www.lego.com;
}
}
以下是curl
在/en-us
上没有尾随斜杠的情况下进行配置时会发生什么。
curl -v http://127.0.0.1/en-us -o /dev/null
# HTTP/1.1 404 Not Found
我希望404. location
阻止使用prefix match,因此/en-us
与该阻止不匹配对我有意义。
这里我感到困惑......
这里我使用相同的配置,但不是返回301,而是proxy_pass
。
server {
listen 0.0.0.0:80;
server_name localhost 127.0.0.1;
location /en-us/ {
proxy_pass http://www.lego.com;
}
}
现在看一下当我运行相同的curl
时会发生什么。
curl -v http://127.0.0.1/en-us -o /dev/null
# HTTP/1.1 301 Moved Permanently
/en-us
上的301对我没有意义。它已重定向到Location: http://127.0.0.1/en-us/
。
在第一个配置中,/en-us
似乎不匹配我的location
块(404)。在第二个配置中,/en-us
执行了(301)。
我正在使用nginx version: nginx/1.4.6 (Ubuntu)
答案 0 :(得分:0)
documentation清楚地解释了事情,正如评论中所指出的那样。
如果某个位置由以斜杠字符结尾的前缀字符串定义,并且请求由proxy_pass,fastcgi_pass,...之一处理,则执行特殊处理...具有代码301的永久重定向将返回到请求的URI并附加斜杠...
对proxy_pass