Nginx 中 3 个 URL 段后重定向删除后缀

Nginx 中 3 个 URL 段后重定向删除后缀

这是我需要删除最后一段的 URL(?order=asc)

https://www.example.com/segment_1/segment_2/page/the_number_goes_here/?order?asc

这是我正在尝试的代码:

location ~ ^/([^/]+)/([^/]+)/page/(\d+)/ {
    try_files $uri $uri/ /index.php?$args;
    # Capture the 2 segments and page number
    set $segment_1 $1;
    set $segment_2 $2;
    set $page_number $4;
    # Redirect without the sufix
    rewrite ^ /$segment_1/$segment_2/page/$page_number/ permanent;
}

答案1

location指令rewrite处理规范化 URI其中不包含查询字符串(您称之为“最后一段”)。

查询字符串在变量中可用$args

rewrite指示?可以选择通过在替换值的末尾附加一个来删除原始查询字符串。

例如:

rewrite ^ /$segment_1/$segment_2/page/$page_number/? permanent;

另外,在您的示例代码中:

  • 页码被捕获$3,而不是$4
  • try_files语句可能是多余的,因为 Nginx 总是会首先评估setrewrite指令。

首先评估

相关内容