所以我有一个使用此类输入的自定义网站:
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脚本似乎都接受额外的/,但是如果你没有将所有链接编码为具有绝对路径,或者使用基本标记,那么只要有人添加了额外的'',你的网站就会被搞砸了'/ ”。
答案 0 :(得分:1)
它必须从某处链接,您需要从哪里找出。您可以使用谷歌网站搜索(即网站:yoursie)来搞清楚。 现在的一个建议是使用规范标签 http://googlewebmastercentral.blogspot.com.au/2009/02/specify-your-canonical.html
答案 1 :(得分: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
更改为最适合您的内容来修改该功能。