我正在使用php echo在几个php文件的头部调用元数据。所有文件都包含使用此代码的唯一元文件:
<?php
include "$_SERVER[DOCUMENT_ROOT]/meta.php";
?>
以下是独特的元文件:
<?php
if (preg_match("@contact@", $_SERVER['REQUEST_URI'])) {
$meta=<<<EOF
<title>FR Contact title</title>
<meta name="description" content="FR Contact description">
<link rel="alternate" href="https://site.ch/contact" hreflang="fr-CH" />
<link rel="alternate" href="https://site.ch/de/contact" hreflang="de-CH" />
<link rel="alternate" href="https://site.ch/it/contact" hreflang="it-CH" />
EOF;
}
elseif (preg_match("@de/contact@", $_SERVER['REQUEST_URI'])) {
$meta=<<<EOF
<title>DE Contact title</title>
<meta name="description" content="DE Contact description">
<link rel="alternate" href="https://site.ch/de/contact" hreflang="de-CH" />
<link rel="alternate" href="https://site.ch/contact" hreflang="fr-CH" />
<link rel="alternate" href="https://site.ch/it/contact" hreflang="it-CH" />
EOF;
}
//echo ">>>>>" . $_SERVER['REQUEST_URI'] . "<<<<";
?>
由于某些未知原因,我在使用 preg_match 调用类似网址时发生冲突,尽管与国家/地区相关的文件夹名称不同: de / contact 错误并显示法语描述。
但是,稍微编辑文件夹名称时: de / kontakt 正在运行并显示德语说明。
你能告诉我如何避免这个错误吗?
答案 0 :(得分:0)
第一个contact
中的preg_match
与两个网址匹配,正则表达式会查找整个字符串中的任何匹配项。您可以交换订单:
if (preg_match("@de/contact@", $_SERVER['REQUEST_URI'])) {
...
} else {
serve french
}
这样一来,如果你先得到德国的比赛,你就会停在那里。如果不是,您只需提供默认的法语内容。 (假设这是您想要的功能,如果不是,您可以将if
放在else
上并执行相同的preg_match
。您还可以在{{1}的正则表达式中添加一个可选项}}
kontakt