0


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

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/cont act

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

4

2 回答 2

1

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

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

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

于 2013-08-01T10:25:34.720 回答
0

这是一个典型的浏览器功能。您有一个位置栏,您可以在其中执行两项完全不同的任务:

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

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

  • 它不以协议前缀开头(例如http://
  • 它包含一个未转义的空格(在 URL 中是不允许的)

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

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

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

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

于 2013-08-01T10:31:41.570 回答