我正在致力於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)(?:\/| $))' –