Php 处理额外的'/';在URL中

Php 处理额外的'/';在URL中,php,Php,因此,我有一个自定义站点,它使用这种类型的输入: example.com/?id=4e2dc982 或者这也会起作用: example.com/index.php?id=4e2dc982 但现在我开始在我的日志中看到谷歌机器人出于某种原因试图检索的点击: example.com/index.php/?id=4e2dc982 更糟糕的是,这实际上是可行的,它使用正确的GET参数提取页面,但是由于额外的“/”所有链接和引用都不起作用。当它尝试加载“image.jpg”而不是加载正确的“exam

因此,我有一个自定义站点,它使用这种类型的输入:

example.com/?id=4e2dc982
或者这也会起作用:

example.com/index.php?id=4e2dc982
但现在我开始在我的日志中看到谷歌机器人出于某种原因试图检索的点击:

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脚本似乎都接受一个额外的/,但如果您没有将所有链接编码为具有绝对路径,或使用基本标记,则每当有人添加额外的“/”时,您的站点都会出错。

它必须从某个地方链接,您需要从何处找到。您可以使用谷歌网站搜索(即site:yoursie)来了解可能的情况。 目前的一个建议是使用规范标记

我认为您实际上可以做的事情之一是获取标题或浏览器代理(尽管某些浏览器不发送此消息),您也可以这样做。然后,如果标题包含类似Google的内容,则不允许bot对页面进行爬网,否则会将用户重定向到该站点。 以下是一个例子:

$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
更改为最适合您的内容来修改该功能。

如果google bot获取该url,那么页面上的某个地方就有这样的url。所以把它改成一个正确的,“更糟糕的是,这实际上是有效的”-你能让它不起作用吗?由于这是一个“定制站点”,除非您向我们展示一些代码,否则我们很难帮助您。默认情况下,我非常确定您的域根目录下的index.php不会响应对
的请求,因此您可能有一些自定义错误。您可以使用
mod_rewrite
来修复此问题,但我同意您应该找到它被引用的位置,因为Googlebot不会偶然访问该URL。。。下面是链接!像往常一样
,否则检查
路径信息
并重定向到基本URL。在任何地方都没有对此类URL的引用。事实上,GoogleBot正试图使用错误的URL访问数百个链接,我不知道为什么,它从来没有这样做过。至于修复它,是的,它是定制的PHP,但我如何才能使它不工作?我甚至不知道一个php文件可以加载一个额外的“/”并且仍然可以工作。我想robots.txt就可以了。