我正在使用 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;
}