如何将带有尾部斜杠的 URL 重定向到非斜杠变体(有例外)?
How to redirect URLs with a trailing slash to the non-slash variant (with exceptions)?
我在设置 NGINX 时遇到了一些问题,以便所有带有尾部斜杠 (/) 的 URL 永久重定向到没有斜杠的变体。问题是除了那些以 /backend
.
开头的 URL 之外,这个指令应该发生在所有 URL 上。
例如:
https://example.com/service/ --> https://example.com/service
https://example.com/service/one/ --> https://example.com/service/one
https://example.com/backend/ --> https://example.com/backend/ (should not redirect)
我目前正在使用这个指令:
server {
listen 80;
listen 443 ssl http2;
[...]
location ~ ^/(?!backend)(.+)/$ {
return 301 $is_args$args;
}
[...]
}
不幸的是,这里出现了以下错误:
https://example.com/service/ --> https://example.com/service/service
谁能帮我解开这个正则表达式之谜?
您的 return 301 $is_args$args;
表达式缺少前导 /
,因此浏览器会将重定向解释为相对于当前 URI。 service
相对于 /service/
是 /service/service
.
要么捕获 </code> 中的前导 <code>/
,要么将其显式添加到 return
语句中。
例如:
location ~ ^/(?!backend)(.+)/$ {
return 301 /$is_args$args;
}
我在设置 NGINX 时遇到了一些问题,以便所有带有尾部斜杠 (/) 的 URL 永久重定向到没有斜杠的变体。问题是除了那些以 /backend
.
例如:
https://example.com/service/ --> https://example.com/service
https://example.com/service/one/ --> https://example.com/service/one
https://example.com/backend/ --> https://example.com/backend/ (should not redirect)
我目前正在使用这个指令:
server {
listen 80;
listen 443 ssl http2;
[...]
location ~ ^/(?!backend)(.+)/$ {
return 301 $is_args$args;
}
[...]
}
不幸的是,这里出现了以下错误:
https://example.com/service/ --> https://example.com/service/service
谁能帮我解开这个正则表达式之谜?
您的 return 301 $is_args$args;
表达式缺少前导 /
,因此浏览器会将重定向解释为相对于当前 URI。 service
相对于 /service/
是 /service/service
.
要么捕获 </code> 中的前导 <code>/
,要么将其显式添加到 return
语句中。
例如:
location ~ ^/(?!backend)(.+)/$ {
return 301 /$is_args$args;
}