PHP - 在URL中使用+号替换空格,将301前置替换为+号版本

时间:2016-05-02 17:13:54

标签: php url-redirection

在PHP中,我有这个有效的URL:

http://example.net/dir/valid+page/

但有些人用空格取代+,即。他们试图改为访问此网址:

http://example.net/dir/valid page/

在这里,我认为,在浏览器的URL中,空格被替换为%20。

我的问题是:如何检测此URL中是否有空格(或者,可能更好,在/ dir /之后的部分中),如果是这样,301-将用户重定向到带有+的版本?

我有这部分代码,但缺少第一行:

if(??space_in_/valid page/_url??)
{
header('HTTP 1.1 301 Moved Permanently');
header("http://example.net/dir/valid+page/");
exit;
}

2 个答案:

答案 0 :(得分:1)

获取网址的路径,并使用preg_match检查路径中是否有空格。

$url = 'http://example.net/dir/valid page/';

if (preg_match ('/ /', parse_url ($url, PHP_URL_PATH))) {
    header ('HTTP 1.1 301 Moved Permanently');
    header ('Location: http://example.net/dir/valid+page/');
    exit;
}

答案 1 :(得分:0)

这是您正在谈论的两个不同的网址。 http://example.net/dir/valid+page/会向您显示您的网页,http://example.net/dir/valid page/会给您404错误。将代码放在页面中无济于事,因为它永远不会看到无效的请求。

如果您确实想要解决此特定错误,则需要在Web服务器配置中执行此操作。对于Apache,您可以添加:

Redirect permanent /dir/valid%20page/ http://example.net/dir/valid+page/