如何配置重定向到url而不在nginx中使用斜杠?

时间:2018-04-03 13:03:51

标签: url nginx nginx-location canonical-link

我想将带有斜杠的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?

2 个答案:

答案 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;
  }