客户要求我自动将任何带有英镑符号的网址重定向到没有英镑符号的版本,但我不认为我在使用此公式的任何网址中检测到#.我使用curPageURL()公式通过电子邮件向自己发送了一个示例网址,它在我测试的网址中没有包含尾随的#符号.
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
if(stripos($currenturl,'#'))
{
Header( "HTTP/1.1 301 Moved Permanently" );
$location = 'Location: ' . str_replace('#','',$currenturl) . '/';
Header($location);
}
Run Code Online (Sandbox Code Playgroud)
*更正 - 我在标题的最后说,我的意思是结束,我的代码在这里可以检测到网址中任何地方的英镑符号.*
之后的部分#是"哈希"或"片段".它完全是客户端 - 它永远不会发送到服务器(如果是,它会导致错误).因此,您的PHP脚本永远不会看到它,因此无法修复它.这是正确的行为,并且是设计的.
也就是说,您可以使用客户端解决方案检查#fragment(例如在JS中 document.location.hash)并从那里重定向.