我有一个关于Wordpress网站的PHP函数的问题。从本文https://perishablepress.com/wordpress-infinite-duplicate-content/开始,Wordpress存在无限分页问题。因此,我需要通过捕获编号的URL并将其重定向到其父URL来解决此问题。
我在网上找到了此代码,但我仅对其做了一些修改。它可以按预期工作,但是不会捕获包含零的URL,也不会直接重定向到带有斜杠的URL(如果获取的URL中没有一个)。
从我的测试中,似乎PHP不能捕获包含带有参数0
的{{1}}的URL(可能是因为0被认为是is_numeric
,但是我不确定)。我对PHP不熟悉,所以我要与大家分享。
对于其余部分,它可以完美工作,捕获编号的URL并重定向到其父URL。当然,我已经将代码关闭到一个函数中并加载到一个钩子中。但是为了更好的说明,我将只共享代码本身:
int
我希望编号的URL(也包含global $posts, $numpages;
$request_uri = $_SERVER['REQUEST_URI'];
$result = preg_match('%\/(\d)+(\/)?$%', $request_uri, $matches);
$ordinal = $result ? intval($matches[1]) : FALSE;
if(is_numeric($ordinal)) {
// a numbered page was requested: validate it
// look-ahead: initialises the global $numpages
setup_postdata($posts[0]); // yes, hack
$redirect_to = ($ordinal) ? '/': (($ordinal > $numpages) ? "/$numpages/" : FALSE);
if(is_string($redirect_to)) {
// we got us a phantom
$redirect_url = get_option('home') . preg_replace('%'.$matches[0].'%', $redirect_to, $request_uri);
// if page = 0 or 1, redirect permanently
if($ordinal) {
header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
}
header("Location: $redirect_url");
exit();
}
}
或000000
)也被重定向到其父源。感谢您的帮助。
答案 0 :(得分:1)
is_numeric()调用'0000'和'0123'之类的值将在php中返回true,并且将通过intval()将其解析为0和123。
我注意到您已将博客文章中的原始代码更改为
// if page = 0 or 1, redirect permanently
($ordinal < 2) {
header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
} else {
header($_SERVER['SERVER_PROTOCOL'] . ' 302 Found');
}
到
// if page = 0 or 1, redirect permanently
if($ordinal) {
header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
}
注释不再与功能匹配,也许是因为您一直希望使用301功能吗?
我相信您的代码将以不同的方式处理0000序数,因为如果进行检查,它将评估为false。
如果我正确理解了您想要的内容,那么如果完全检查一下,可以尝试将其删除,看看是否可以解决您的问题。如果不能,您能否提供一些显示问题的完整URL?