客户要求我自动将任何带有井号的网址重定向到不带井号的版本,但我认为我没有使用此公式在任何网址中检测到 #。我使用 curPageURL() 公式通过电子邮件给自己发送了一个示例 URL,它在我正在测试的 URL 中不包含尾随 # 符号。
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);
}
*更正 - 我在标题的末尾说过,我的意思是结尾,我的代码显然可以检测到网址中任何位置的井号。 *
之后的部分#
是“散列”或“片段”。它完全是客户端的 - 它永远不会发送到服务器(如果是,则会导致错误)。因此,您的 PHP 脚本永远不会看到它,因此无法修复它。这是正确的行为,并且是有意设计的。
也就是说,您可以使用客户端解决方案检查#fragment(例如在 JS 中使用document.location.hash
)并从那里重定向。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)