我正在致力于php script
以根据用户所在的页面输出一个hreflang
标签。目前,我正在使用preg_match()
来匹配再次请求特定模式的网址。如果匹配输出的相关标签...正则表达式preg_match()for hreflang
所以我有这样的事情:
<?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
页它输出上面的标签。我也有另一个URL www.mydomain1.com/en-gb/company/stats
。所以我写了另一块为这个网址:
<?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
是错误的,但我无法准确确定在哪里。我会很感激任何帮助,以解决。
preg_match("/^\/en-gb\/company(?!\/stats(?:\/|$))/i", $url)
^^^^^^^^^^^^^^^^^^^
的(?!\/stats(?:\/|$))
排除模式将会失败所遵循的/en-gb/company
所有匹配:
谢谢你的解决方案,它似乎很好 - 关于它的一个问题...如果我有很多子页面,例如'/ company/about'和'/ company/contact'等,我是否需要添加多个'负面望远'??? – Javacadabra
这取决于你想要排除什么。如果你只是希望匹配输入结尾的'/ en-gb/company'和第一个正则表达式,使用Paladin的解决方案(可能会修改为'preg_match(“/^\/en-gb \/company \ /?$/i“,$ url)')。但是,您可以添加其他选项:'(?!\ /(?: stats | contact | etc)(?:\/| $))' –