如何在 nginx 中将无效的 url 重定向到有效的 url?
How to redirect invalid url to a valid url in nginx?
我有一个 url 类型的有效 http://example.com/valid/. Using nginx how do i redirect a url of type http://example.com/valid/dsdhshd 到我的有效 url?
我试过了:
location /valid/ {
resolver 8.8.8.8;
proxy_pass http://example.com/valid/;
proxy_redirect off;
}
但是它给出了 500 内部服务器错误。
我也尝试了位置 return 301 $scheme://example.com/valid/;
但这只会让我陷入无限的重定向循环。
如果要将重定向发送到客户端,请不要代理请求并直接发送。
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 本身,一些你不想匹配的东西。您只想匹配 URLs 在该字符串之后有一些东西,例如/valid/foo
。这正是上面位置块中的正则表达式所确保的。
这是我可以考虑的示例
server {
location /valid {
try_files $uri $uri/ @redirect_invalid;
}
location @redirect_invalid {
return 301 $scheme://$server_name/valid;
}
}
但这将是非常具体的,如果有很多文件夹,您需要分别添加每个文件夹,我想不出一种方法可以使所有文件夹都通用,也许其他人可以帮我解决这个问题。
我有一个 url 类型的有效 http://example.com/valid/. Using nginx how do i redirect a url of type http://example.com/valid/dsdhshd 到我的有效 url?
我试过了:
location /valid/ {
resolver 8.8.8.8;
proxy_pass http://example.com/valid/;
proxy_redirect off;
}
但是它给出了 500 内部服务器错误。
我也尝试了位置 return 301 $scheme://example.com/valid/;
但这只会让我陷入无限的重定向循环。
如果要将重定向发送到客户端,请不要代理请求并直接发送。
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 本身,一些你不想匹配的东西。您只想匹配 URLs 在该字符串之后有一些东西,例如/valid/foo
。这正是上面位置块中的正则表达式所确保的。
这是我可以考虑的示例
server {
location /valid {
try_files $uri $uri/ @redirect_invalid;
}
location @redirect_invalid {
return 301 $scheme://$server_name/valid;
}
}
但这将是非常具体的,如果有很多文件夹,您需要分别添加每个文件夹,我想不出一种方法可以使所有文件夹都通用,也许其他人可以帮我解决这个问题。