nginx 分页与变量重写

nginx 分页与变量重写

我正在使用 wordpress,我得到了此代码致力于获取和分页特定类别的子类别。

它运行(几乎)正常,因为它为我产生了两个可以在 nginx 上解决的问题。

此分页的第一个问题:

分页的工作方式通过使用两个不同的 URL 对第一页进行两次分页,从而产生了重复内容问题;

  • domain.com/cat-variable-name/
  • domain.com/cat-variable-name/?cpage=1

当有人返回“?cpage=1",则应重定向至:

domain.com/cat-variable-name/

第二个问题:

这些不是 SEO 友好的 URL,我确实有一个自定义永久链接/%帖子名称%/但它不会重写此自定义分页,我不知道如何在不破坏我网站上任何其他内容的情况下做到这一点。所以...

第一页之后domain.com/cat-variable-name/?cpage=(page_number)

我需要找到一种方法将所有内容重写为如下内容:

domain.com/cat-variable-name/cpage/(page_number)

我怎样才能做到这一点?

以下是我尝试过但失败的方法:

我已经尝试过这些但没有成功:

rewrite ^/?cpage=$1 /cpage/([^/]*)/;

if ($request_uri ~* ^(.+)\?cpage=1$) { 
set $dom_prefix $1; set $args ''; rewrite ^(.*)$ $scheme://$host$dom_prefix permanent; break; } 
if ($request_uri ~* ^(.+)\?cpage=(\d+)$) { 
set $dom_prefix $1; set $cpage $2; set $args ''; rewrite ^(.*)$ $scheme://$host$dom_prefix/p$cpage permanent; break; }

注意:请记住“cat 变量名称”“页码”永远不会相同。

答案1

nginx$request_uri不包含查询参数,它只包含 URI。查询参数以$arg_name变量形式提供。

您可以尝试以下操作:

if ($arg_cpage = 1) {
    return 301 $scheme://$host$uri;
    break;
}

if ($arg_cpage ~ ^(\d+)$) {
    return 301 $scheme://$host$uri/p$1;
    break;
}

相关内容