如何将无效网址重定向到nginx中的有效网址?

时间:2015-01-11 15:56:17

标签: nginx

我有一个http://example.com/valid/类型的有效网址。使用nginx如何将http://example.com/valid/dsdhshd类型的网址重定向到我的有效网址?

我试过了:

location /valid/ {
    resolver 8.8.8.8;
    proxy_pass http://example.com/valid/;
    proxy_redirect off;
}

但它会产生500内部服务器错误。

我也试过了地点return 301 $scheme://example.com/valid/;,但这只是让我进入无限重定向循环。

2 个答案:

答案 0 :(得分:3)

如果您想将重定向发送到客户端,请不要代理请求并直接发送。

server {
    # Your server configuration ...

    # Enclose regular expressions in default location.
    location / {

        location /valid {
            location ~ /valid/.+ {
                try_files $uri @invalid;
            }

            # Handle the request to the valid URL ...
        }

    }

    location @invalid {
        return 301 $scheme://$server_name/valid;
    }
}

这应该可以解决问题。您确实获得了重定向循环,因为您的位置块也与/valid/ URL本身相匹配,这是您不想匹配的内容。您只想匹配在该字符串后面有某些内容的网址,例如/valid/foo。这正是上面的位置块中的正则表达式确保的。

答案 1 :(得分:0)

这是我能想到的样本

server {
  location /valid {
    try_files $uri $uri/ @redirect_invalid;
  }
  location @redirect_invalid {
    return 301 $scheme://$server_name/valid;
  }
}

但这将是非常具体的,如果你需要单独添加许多文件夹,我想不出一种方法可以为所有文件夹制作这种通用文件,也许别人可以帮我解决这个问题。