假设您为拥有相当大的电子商务网站的公司工作,该网站包含许多产品类别和子类别(有时还有子类别)。因此,为了用户的方便,存在一些具有重复子类别和重复内容的类别。每当用户登陆其中一个重复类别并将其指向更友好的SEO类别时,您都希望使用PHP生成rel规范。在这种情况下,具有重复子类别的类别是“随机东西”,而我喜欢规范指向的类别是“各种东西”。因此,item_1.html - item_4.html都可以在“随机东西”和“各种东西”中找到,但我希望规范指向“各种各样的东西”。目前,这就是我所拥有的:
<?php if(is_numeric(strpos($_SERVER['REQUEST_URI'],'random-stuff/item_1.html'))) echo '<link rel="canonical" href="http://mydomain.com'.str_replace('random-stuff', 'assorted-things', $_SERVER['REQUEST_URI']).'" />'; ?>
<?php if(is_numeric(strpos($_SERVER['REQUEST_URI'],'random-stuff/item_2.html'))) echo '<link rel="canonical" href="http://mydomain.com'.str_replace('random-stuff', 'assorted-things', $_SERVER['REQUEST_URI']).'" />'; ?>
<?php if(is_numeric(strpos($_SERVER['REQUEST_URI'],'random-stuff/item_3.html'))) echo '<link rel="canonical" href="http://mydomain.com'.str_replace('random-stuff', 'assorted-things', $_SERVER['REQUEST_URI']).'" />'; ?>
<?php if(is_numeric(strpos($_SERVER['REQUEST_URI'],'random-stuff/item_4.html'))) echo '<link rel="canonical" href="http://mydomain.com'.str_replace('random-stuff', 'assorted-things', $_SERVER['REQUEST_URI']).'" />'; ?>
它有效,但它很混乱。我更喜欢有一行代码检查item-1.html - item4.html而不是四次检查。有没有人知道如何实现这一目标?
另外,请记住,item_1.html - item_4.html不是“随机内容”中的唯一内容,它们只是与“各种各样的东西”共享的重复类别。谢谢!
更新
Marty建议使用glob()
函数循环遍历目录中的所有文件,并仅回显我需要的内容。以下是我提出的代码:
$dir = 'http://www.mydomain.com/random-stuff/*';
foreach(glob($dir) as $file) {
if($file == 'item_1.html' || 'item_2.html' ||'item_3.html' ||'item_4.html') {
echo '<link rel="canonical" href="http://mydomain.com'.str_replace('random-stuff', 'assorted-things', $_SERVER['REQUEST_URI']).'" />';
}
}
这仍然似乎不起作用。任何人都可以进一步照亮我吗?我从根本上误解了一些事情吗?
答案 0 :(得分:1)
这是一个更好的解决方案: - 对不起,顺便说一句,我理解你的问题是错误的 -
// First, get last portion of url
$filename = end(explode('/',$_SERVER['REQUEST_URI']));
// Check if the same filename exists in 'assorted-things' directory:
if (file_exists("../assorted-things/$filename")) {
// If so, echo canonical
echo '<link rel="canonical" href="http://mydomain.com/assorted-things/' . $filename . '" />';
}