如何在 nginx 中配置重定向到 url 而没有尾部斜杠?
How to configure redirects to url without trailing slash in nginx?
我想将带有斜线的 URL 重定向到没有尾部斜线的路径。因此 /some-url/ 到 /some-url 重复内容问题
以及其余的网址,例如
/some-url.xml
/some-url?
/some-url/?
/some-url?q=v
/some-url/?q=v
/some-url
应该保留而不重定向。
我想要与以下问题完全相反。
请考虑在您的服务器块内尝试:
rewrite ^/(.*)/$ / permanent;
来自:https://www.scalescale.com/tips/nginx/nginx-remove-trailing-slash/
这将查找请求 URI 以“/”开头并以斜杠结尾(重写后搜索部分末尾的“$”)的任何内容,并将其替换为“/”开头和末尾没有结束斜杠的 URI。最后一部分表明它将提供 301 重定向。
更新:
为避免使用 GET 参数从 URI 中删除斜杠,请尝试:
if ($query_string != "") {
rewrite ^/(.*)/$ / permanent;
}
通常不建议使用 if 语句,但如果您要使用这样的映射:
map $query_string $trailing_slash {
"" ""
default "/";
}
rewrite ^/(.*)/$ /$trailing_slash permanent;
它会导致对带有查询的任何字符串进行无限重定向,因为它会重定向到自身(源和目标都将包含尾部斜杠)。因此,我们需要使用条件进行重写。
在验证了所有 nginx 配置后,我没有找到任何其他条件和 AND (&&) 条件。最后我在 nginx
中使用了 "set" 属性
set $val 0;
if ($request_method ~ "^GET$"){
set $val 1;
}
if ($request_uri ~ ^/(.*)/$ ) {
set $val "${val}1";
}
location / {
if ($val ~ 11) { rewrite ^/(.*)/$ https://$host/; }
try_files $uri $uri/ /index.php$is_args$args;
}
我想将带有斜线的 URL 重定向到没有尾部斜线的路径。因此 /some-url/ 到 /some-url 重复内容问题
以及其余的网址,例如
/some-url.xml
/some-url?
/some-url/?
/some-url?q=v
/some-url/?q=v
/some-url
应该保留而不重定向。
我想要与以下问题完全相反。
请考虑在您的服务器块内尝试:
rewrite ^/(.*)/$ / permanent;
来自:https://www.scalescale.com/tips/nginx/nginx-remove-trailing-slash/
这将查找请求 URI 以“/”开头并以斜杠结尾(重写后搜索部分末尾的“$”)的任何内容,并将其替换为“/”开头和末尾没有结束斜杠的 URI。最后一部分表明它将提供 301 重定向。
更新: 为避免使用 GET 参数从 URI 中删除斜杠,请尝试:
if ($query_string != "") {
rewrite ^/(.*)/$ / permanent;
}
通常不建议使用 if 语句,但如果您要使用这样的映射:
map $query_string $trailing_slash {
"" ""
default "/";
}
rewrite ^/(.*)/$ /$trailing_slash permanent;
它会导致对带有查询的任何字符串进行无限重定向,因为它会重定向到自身(源和目标都将包含尾部斜杠)。因此,我们需要使用条件进行重写。
在验证了所有 nginx 配置后,我没有找到任何其他条件和 AND (&&) 条件。最后我在 nginx
中使用了 "set" 属性 set $val 0;
if ($request_method ~ "^GET$"){
set $val 1;
}
if ($request_uri ~ ^/(.*)/$ ) {
set $val "${val}1";
}
location / {
if ($val ~ 11) { rewrite ^/(.*)/$ https://$host/; }
try_files $uri $uri/ /index.php$is_args$args;
}