url - 如何在 nginx 中配置重定向到带有斜杠的 url?

标签 url nginx nginx-location canonical-link

我想将不带斜杠的 URL 重定向到带有尾部斜杠的路径。 所以 /some-url/some-url/

其余的网址,例如

  • /some-url.xml
  • /某个网址?
  • /some-url?q=v
  • /一些网址/

应保持不变,无需重定向。

我找到这篇文章https://www.ateamsystems.com/tech-blog/nginx-add-trailing-slash-with-301-redirect-without-if-statements/作者建议使用以下规则:

location ~ ^([^.\?]*[^/])$ {
   try_files $uri @addslash;
}

location @addslash {
    return 301 $uri/;
}

不幸的是,这并没有真正起作用。因为 url /some-url?q=v 被重定向到 /some-url/

您能否建议如何更改正则表达式以使其正常工作?

最佳答案

这应该可以解决问题:

location / {
    if ($request_uri ~ ^([^.\?]*[^/])$) {
        return 301 $1/;
    }

    try_files $uri $uri/ /index.php$is_args$args;
}

关于url - 如何在 nginx 中配置重定向到带有斜杠的 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46666102/

相关文章:

php - 如何处理像 Last.FM 或维基百科这样的社区 URL 样式?

Django 没有与参数的反向匹配

ssl - Nginx SSL 在单个子域而不是多个子域上

wordpress - 无法使用docker和nginx作为反向代理托管多个Wordpress网站

Nginx 位置/vs/artifactory

nginx - 使用命令 "nginx"、 "service start nginx"和 "systemctl nginx start"启动 nginx 有什么区别?

php - 哈希 url(片段)可以被搜索引擎抓取吗?

javascript - 使用变量作为类名

javascript - 带有 Express.js 和 socket.io 的 NGINX |不能获取

ssl - 如何使用 Nginx 为不同的位置启用不同的 SSL 证书?