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