【问题标题】:Nginx: How to add a trailing slash to URL except if it starts with certain nameNginx:如何向 URL 添加尾部斜杠,除非它以特定名称开头
【发布时间】:2021-11-27 02:45:09
【问题描述】:

我正在尝试在 nginx 配置文件中添加重定向,如果用户登陆除特定 URL 之外的任何 URL,它将在其后添加一个斜杠。此外,如果其中有 .,则不应添加尾部斜杠。

例子:

我确实已经看到了这个,它涵盖了我需要的大部分内容:

#add trailing slash to all URLs except if it contains a .
rewrite ^([^.])*[^/]$ $1/ permanent; 

我还想出了如何通过执行以下操作不向特定 URL 添加斜杠:

rewrite ^(?!no-trailing-slash).*[^/]$ $1/ permanent;

但我不知道如何将它们组合起来:

  1. 所有重定向都将添加一个尾随 /
  2. 除非他们的网址中有.
  3. 并且不以 `/no-trailing-slash URL 开头

【问题讨论】:

    标签: regex .htaccess nginx redirect


    【解决方案1】:

    multi-line flag一起使用:

    ^(.*)(\/(?!no-trailing-slash)([^.\/])+)$
    
    

    将任何匹配替换为:

    $1$2/
    

    该模式匹配最后一个/ 之后既没有. 也没有以特定模式开头并在它们末尾添加/ 的任何内容。

    查看Demo

    【讨论】:

    • 这个会在除/no-trailing-slash 重写/foo//foo// 等之外的任何URI 添加一个斜杠。使用^(.*)(/(?!no-trailing-slash)([^.])*[^/.])$ 防止它向已经有的URI 添加斜杠那个斜线。
    • 你说得对,谢谢。
    【解决方案2】:

    我实际上是在 HFZ 的正则表达式示例的帮助下弄明白的。我用过这个,效果很好:

    ^((?!no-trailing-slash)([^.]*[^\/]))$
    

    并将任何匹配替换为:

    $1/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多