2

所以我有一个使用这种类型输入的定制网站:

example.com/?id=4e2dc982

或者这也可以:

example.com/index.php?id=4e2dc982

但现在我开始在我的日志中看到来自 GoogleBot 的命中,因为某种原因试图检索它:

example.com/index.php/?id=4e2dc982

更糟糕的是,这确实有效,它使用正确的 GET 参数拉取页面,但由于额外的“/”,所有链接和引用都不起作用。当它尝试加载“image.jpg”而不是加载正确的“example.com/image.jpg”时,它会尝试加载“example.com/index.php/image.jpg”。我如何最好地解决这个问题?我知道我可以返回并替换每个链接以使用绝对路径,但这很愚蠢。带有额外“/”的链接首先不应该工作。

更新:

我找到了修复程序,但仍然不知道为什么甚至允许这样做。我去了:

http://ca1.php.net/manual-lookup.php?pattern=test

并尝试查看以下是否可行,果然可行:

http://ca1.php.net/manual-lookup.php/?pattern=test

但是他们的页面没有中断。所以我看了看,发现了原因:

<base href="http://ca1.php.net/manual-lookup.php" />

所以基本上,任何 PHP 脚本似乎都接受额外的 /,但如果你没有将所有链接编码为具有绝对路径或使用基本标签,那么只要有人添加额外的“/”,你的网站就会被搞砸。

4

2 回答 2

1

它必须从某个地方链接,您需要从哪里弄清楚。你可以用google site search来(即site:yoursie)可能会搞清楚。目前的一个建议是使用规范标签 http://googlewebmastercentral.blogspot.com.au/2009/02/specify-your-canonical.html

于 2012-10-25T23:07:28.270 回答
0

我认为您实际上可以做的一件事是获取标头或浏览器代理(尽管有些浏览器不发送此),您可以做到。然后,如果标头包含 Google 之类的内容,则不允许机器人抓取页面,否则将用户重定向到该站点。下面是一个例子:

$browser = $_SERVER['HTTP_USER_AGENT'];
checkbrowser($browser); //Calls checkbrowser(); with the browser version.
function checkbrowser($analyze) {
    $searchwords = array("bot","google","crawler");

    $matches = array();
    $matchFound = preg_match_all(
                "/\b(" . implode($searchwords,"|") . ")\b/i", 
                $analyze, 
                $matches
        );

        if ($matchFound) {
            $words = array_unique($matches[0]);
            foreach($words as $word) {
            if($word == "bot") {
                echo "Sorry, bots are not allowed to crawl this specific page.";
                die(); //Terminate the script and leave the bot with that message so it cannot crawl.
            }
        }
    }

}

这就是我经常这样做的方式,但我将这种方法用于不同的事情。$searchwords您可以通过将 更改为最适合您的内容来修改功能。

于 2012-10-25T23:12:05.573 回答