我有一个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/;
,但这只是让我进入无限重定向循环。
答案 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;
}
}
但这将是非常具体的,如果你需要单独添加许多文件夹,我想不出一种方法可以为所有文件夹制作这种通用文件,也许别人可以帮我解决这个问题。