我正在尝试将两种preg\\u匹配模式分别与|、、组合在一起,。
/blog\\/page\\/[0-9]+\\/?$/ with /tag\\/ skip in /blog/page/ and /tag/
/page\\/[0-9]+\\/?$/ with /[0-9]+\\/?$/ ex. /page/2/ and only /2/
/(page\\/[0-9]+\\/?)$/ with /([0-9]+\\/?)$/
function redirect_pagination() {
if(!preg_match(\'/blog\\/page\\/[0-9]+\\/?$/,|,/tag\\/\', $_SERVER[\'REQUEST_URI\'])) {
if(preg_match(\'/page\\/[0-9]+\\/?$/,|,/[0-9]+\\/?$/\', $_SERVER[\'REQUEST_URI\'])) {
$new_url = preg_replace(\'/(page\\/[0-9]+\\/?)$/,|,/([0-9]+\\/?)$/\', \'\', $_SERVER[\'REQUEST_URI\']);
wp_redirect($new_url, 301);
exit;
}
}
}
add_action( \'init\', \'redirect_pagination\', 1 );
SO网友:Leif Högberg
我想这就是你要找的
if (preg_match(\'@^/((?!blog|tag)[^/]+)/(?:page/)?\\d+@\', $_SERVER[\'REQUEST_URI\'], $m)) {
wp_redirect("/$m[1]", 301);
}
regexp使用lookahead确保第一个匹配不是blog或tag。
这个\'[^/]+\'
part匹配任何非正斜杠的内容(/
).
(?:page/)?
- 对进行可选匹配\'page/\'
\\d+
- 匹配任意数字。
这不会重定向\'/blog/2
如果你愿意\'/blog/2\'
要重定向但不\'/blog/page/2\'
然后将上面的regexp更改为\'blog/page\'
现在上面写着\'blog\'
.
附言:我知道这是5个月前的事了,你现在可能已经搬家了,但我还是会把它放在这里,以防其他人在同样的问题上需要帮助