在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;
}
答案 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/