我正在使用php script
根据用户所在的页面输出大量hreflang
个标签。目前我正在使用preg_match()
来再次匹配请求的URL特定模式。如果匹配输出相关标签......
所以我有这样的事情:
<?php if (preg_match("/^\/en-gb\/company/i", $url)): ?>
<link rel="alternate" href="https://www.mydomain1.com/en-gb/company/" hreflang="en-gb" />
<link rel="alternate" href="https://www.mydomain1.com/company/" hreflang="en" />
<link rel="alternate" href="https://www.mydomain1.com/company/" hreflang="x-default" />
<?php endif; ?>
当我访问页面www.mydomain1.com/en-gb/company
时,它会输出上述标签。我还有另一个网址www.mydomain1.com/en-gb/company/stats
。所以我为这个URL写了另一个块:
<?php if (preg_match("/^\/en-gb\/company\/stats/i", $url)): ?>
<link rel="alternate" href="https://www.mydomain1.com/en-gb/company/stats" hreflang="en-gb" />
<link rel="alternate" href="https://www.mydomain1.com/company/stats" hreflang="en" />
<link rel="alternate" href="https://www.mydomain1.com/company/stats" hreflang="x-default" />
<?php endif; ?>
但是,此页面将输出第一个hreflangtags
中的所有if statement
,而不会输入第二个regular Expression
。我知道我的ansible.cfg
错了,但我无法准确找到确切的位置。我很感激任何帮助以便解决。
答案 0 :(得分:2)
尝试使用结束运算符$
,如下所示:
<?php if (preg_match("/^\/en-gb\/company\/$i", $url)): ?>
因此,在您的代码中,每次使用en-gb / company,您的网址启动时,它都会显示您的第一个代码。你的第二个网址也是以en-gb / company开头的,所以你需要告诉匹配,它会在公司之后结束你的代码。
答案 1 :(得分:1)
您可以限制第一个正则表达式,以避免在使用否定前瞻跟随en-gb/company
时匹配/stats
:
preg_match("/^\/en-gb\/company(?!\/stats(?:\/|$))/i", $url)
^^^^^^^^^^^^^^^^^^^
请参阅regex demo
(?!\/stats(?:\/|$))
否定前瞻将导致/en-gb/company
的所有匹配在输入结束后跟/stats/
或/stats
失败。
请注意,如果您只想使用第一个正则表达式检查整个路径,可以通过添加$
字符串结尾锚点来使用Paladin76 approach,但我也在最后添加了一个可选的/
:
preg_match("/^\/en-gb\/company\/?$/i", $url)
^^^^
现在,此模式仅匹配仅等于/en-gb/company
或/en-gb/company/
的输入。