繁体   English   中英

如何在PHP中获取包含零的编号URL?

[英]How can i fetch numbered URLs that contain zero in PHP?

我有一个关于Wordpress网站的PHP函数的问题。 截至本文为止,https: //perishablepress.com/wordpress-infinite-duplicate-content/ Wordpress具有无限分页问题。 因此,我需要通过捕获编号的URL并将其重定向到其父URL来解决此问题。

我在网上找到了此代码,但我只对其做了一些修改。 它可以按预期工作,但是不会捕获包含零的URL,也不会直接重定向到带有斜杠的URL(如果获取的URL中没有一个)。

从我的测试来看,PHP似乎没有使用is_numeric参数捕获包含0的URL(可能是因为0被认为是int ,但我不确定)。 我不熟悉PHP,因此与您分享。

对于其余部分,它可以完美工作,捕获编号的URL并重定向到其父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();

        }
    }

我希望编号的URL(也包含00000001234 )也将重定向到其父源。 谢谢您的帮助。

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?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM