我使用此部分代码打印if (location.getSpeed > 4){
stratTrip();
}
代码:
canonical
但如果当前<?php
if(!empty($_SERVER["REQUEST_URI"])){
$url = strtok($_SERVER["REQUEST_URI"],'?');
?>
<link rel="canonical" href="https://mywebsite.com<?=urldecode($url);?>" />
<?php
} else {
?>
<link rel="canonical" href="https://mywebsite.com" />
<?php
}
?>
为else
,则不会准备URL
条件。我发现了原因,因为https://mywebsite.com
返回var_dump($_SERVER["REQUEST_URI"]);
。为什么当我打开此网址时string(1) "/"
返回REQUEST_URI
而尾部没有斜线?
无论如何,除了这个问题,我如何解决我的代码才能工作?
答案 0 :(得分:3)
在HTTP通话中,$_SERVER['REQUEST_URI']
永远不能是empty
,除非脚本本身为unset($_SERVER['REQUEST_URI'])
或$_SERVER['REQUEST_URI] = ''
。
对于http://mywebsite.com
的HTTP调用,它将保留/
作为其值。这就是你得到的。 /
表示网站的根目录,因此当向网站的根目录发出HTTP请求时,/
将作为路径发送,并且始终存在,无论您是否将其添加到网址中。
我认为这澄清了为什么你没有达到代码的else
条件。
出现问题,如果你想在没有任何查询参数的情况下将路径附加到url,那么更好的方法应该是:
<link rel="canonical" href="https://mywebsite.com<?php echo parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); ?>">
这将取代您的所有代码。您可能需要查看PHP的parse_url
函数。
如果您不想故意使用尾部斜杠,则可以使用rtrim
。
<link rel="canonical" href="https://mywebsite.com<?php echo rtrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); ?>">
如果您将任何有效的URL传递给parse_url
,并且不希望仅对root用户进行尾部斜杠,则:
<?php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if($path == '/' || !$path) {
$path = '';
} ?>
<link rel="canonical" href="https://mywebsite.com<?php echo $path; ?>">