Nginx:不重定向没有尾随 /

Nginx:不重定向没有尾随 /

我遇到一个问题,如果没有提供尾随的 /,Nginx 会将我重定向到错误的 URL。

我已经设置了 haproxy 来委托多个服务器之间的请求。

卷曲输出:

➜  ~  curl -i www.ordify.com/register
HTTP/1.1 301 Moved Permanently
Server: nginx/1.1.19
Date: Tue, 14 Aug 2012 08:10:39 GMT
Content-Type: text/html
Content-Length: 185
Location: http://www.ordify.com:4000/register/
Connection: close

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>

Nginx 配置:

server {
    listen *:4000;
    server_name ordify.com;
    access_log  /var/log/nginx/website-com.log;
    rewrite_log on;
    error_page 405 = $uri;

    location / {
      root   /home/website/en/;
      index  index.html index.htm;
    }
    if ($host != 'www.ordify.com' ) {
        rewrite  ^/(.*)$  http://www.ordify.com/$1  permanent;
    }
    rewrite /registrieren/ http://www.ordify.com/register/ permanent;
    rewrite /presse/ http://www.ordify.com/press/ permanent;

}

我已经尝试过使用http://wiki.nginx.org/HttpCoreModule#server_name_in_redirect没有成功。

答案1

if ($host != 'www.ordify.com' ) {
    rewrite  ^/(.*)$  http://www.ordify.com/$1  permanent;
}

这是一种无效的方法。请参阅:http://nginx.org/en/docs/http/converting_rewrite_rules.html

正确的方法是定义一个单独的服务器来捕获所有其他域。可以使用正则表达式定义服务器名称。试试这个:

server {
    listen      *:4000;
    server_name www.ordify.com;
    ...
}

server {
    listen      *:4000;
    server_name ~^(?!www)\.ordify\.com$;
    return      301 http://www.ordify.com$request_uri;
    ...
}

?!www-负面前瞻, 表示匹配后面没有 的内容www

相关内容