在URL中添加空格会重定向到搜索引擎


Adding a space to a URL redirects to a search engine


我对URL中的空格有问题。如果地址包含空格,如何正确重定向请求。我使用的是examplep,这就是我目前所拥有的。

htaccess
RewriteEngine On
RewriteBase /test/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

index.php
//sample pages
$pages = array('home','about','contact');
$parts = explode("/",$_SERVER['REQUEST_URI']);
    if(!in_array(end($parts), $pages))
    {       
        header("HTTP/1.0 404 Not Found");
        echo "Page not found";  
        die();
    }
    else
    {
        echo "You are on the ".end($parts)." page";
    }
error.php
echo "Error!";

当我键入地址http://;localhost/test/contactkhttp://;localhost/test/contact一切都正常工作,但如果有人意外地键入了一个包括空白的地址,一切都崩溃了,页面被重定向到localhost之外,我可以看到这样的内容:

显示localhost/test/contact的结果
搜索localhost/test/contact

如何将所有错误请求重定向到error.php文件
非常感谢。

显示localhost/test/contact的结果搜索localhost/test/contact[这不是链接]

这听起来像是你的浏览器在将你的URL解释为搜索查询时,你不小心在其中放了一个空格。然后它似乎将你重定向到搜索引擎,而不是你的网站。

因为这是浏览器的行为,而不是服务器的行为,所以你无法在全球范围内改变这种行为。你当然可以更改浏览器的配置,但这仍然会发生在使用同一浏览器的其他人身上。

这是一个典型的浏览器功能。你有一个位置栏,你可以在那里做两个完全不同的任务:

  • 键入要加载的URL
  • 键入要在默认搜索引擎中查找的搜索词

您正在键入一个未被标识为URL的字符串,原因有两个:

  • 它不以协议前缀开头(例如http://
  • 它包含一个无标题的空白(URL中不允许使用此空白)

所以浏览器假设你想用谷歌搜索它,就像你输入了"巴塞罗那的餐馆"一样。

为了安全起见,您只需键入完整的URL:

http://localhost/test/cont%20act

但是你不能阻止你的访问者犯这个错误。这是浏览器和用户之间的私有内容;-)