更正 Joomla 的 HTML <head> 和 <body> 中错误生成的 href 链接
Posted
技术标签:
【中文标题】更正 Joomla 的 HTML <head> 和 <body> 中错误生成的 href 链接【英文标题】:Correcting wrongly generated href link in the HTML <head> and <body> of Joomla 【发布时间】:2020-01-13 19:36:02 【问题描述】:我在多语言网站上使用的其中一个 Joomla 3 模板在 html 标题和正文中生成了错误的 href 标记链接。所有多语言页面上的 href 内容如下:
在头部 链接 href="https://domain/page?layout=post" rel="alternate" hreflang="en-GB" /> 在身体里 a href="/fr/page?layout=post">应该是
链接 href="https://domain/page" rel="alternate" hreflang="en-GB" /> 和 一个 href="/fr/page">我目前使用了 .htaccess 文件的临时重写;然而,这产生了数百个 301 重定向,我确信这不是一个好的 SEO 解决方案。
因为找到原点并永久更正代码需要一些时间,所以我需要一些 php 帮助来删除字符串 ?layout=post 并在 and 中显示正确的 href 链接。
【问题讨论】:
【参考方案1】:我猜你需要进入 Joomla 设置并启用搜索引擎友好的 URLs
只有在此之后,您才应该修改 .htaccess 文件。
这应该可以解决您的问题,如果不是,那可能是您所说的模板问题,但是您必须在模板文件中查看它,这需要您花费一些时间。
【讨论】:
【参考方案2】:这是我正在使用的版本。 我是在干净的 php 上实现的。
<?php
// your full url
$url = 'https://www.shop.com/en/category/tv-video-and-audio/';
//accepted languages or site version
$langs = array(
'en',
'cn',
'ru'
);
//function to render full page link in all languages
function renderhrefurl($url = NULL, $lang = NULL)
$exploded = explode('/', $url);
$exploded[3] = $lang;
return implode('/', $exploded);
//set hreflang attribute data
$hreflangs = array(
array(
'hreflang' => 'en',
'hrefurl' => renderhrefurl($url, 'en')
),
array(
'hreflang' => 'cn',
'hrefurl' => renderhrefurl($url, 'cn')
)
,
array(
'hreflang' => 'ru',
'hrefurl' => renderhrefurl($url, 'ru')
)
);
//generate result
foreach($hreflangs as $key => $item)
echo '
Key: '.$key.' - lang: '.$item['hreflang'].' = '.$item['hrefurl'];
echo '
------- Rendered Href Langs Tags ------- ';
//generate completed hreflangs
foreach($hreflangs as $key => $item)
echo '
<link rel="alternate" hreflang="'.$item['hreflang'].'" href="'.$item['hrefurl'].'" />';
?>
复制此代码并粘贴到php compiler online 以显示其工作原理。
并使用strtok('Your link with get parameter', '?');
删除get参数!
【讨论】:
以上是关于更正 Joomla 的 HTML <head> 和 <body> 中错误生成的 href 链接的主要内容,如果未能解决你的问题,请参考以下文章