我遇到了一种情况,我需要用正则表达式找到的值替换字符串的一部分,但使用正则表达式作为最终结果的基础。
警告:这是为了解决网站上更大的规范化问题。
我们有一个自定义 CMS,它将通过正则表达式响应 URL:
例如:
Request URI: /mysection/mykey/PageName.htm
Page Match: /mysection/([^/]+)/pagename.htm
如果有人请求/mysection/mykey/PageName.htm,虽然这会起作用,但它不是正确的页面,在这种情况下正确的页面是/mysection/mykey/pagename.htm。
如果我最初进行不区分大小写的匹配,我可以找出链接到页面的人是否正确。如果他们没有,我们不会显示 404,我们要做的是在该部分中生成 rel="canonical" 以告诉 google 哪个页面是正确的并且这实际上是重复的。
该页面的正确 URL 是:
/mysection/mykey/pagename.htm
因此,我需要做的是将请求 URI 中的“mykey”部分叠加到页面匹配字符串中,但将页面匹配字符串的版本作为结果的总和。
我一直在看 preg_replace 但由于可以有多个替换,你不能给它所需的第二个参数。
这是我编写的一些代码,以达到我现在的位置:
// $page['uri'] is the regex to match
// $URL is the requested URL at the web server.
// NB: it is not important to worry about if we have found a valid or invalid URL
// at this stage as that has already been processed prior to this point.
if (preg_match("|". $page['uri'] ."|", $URL)) {
// we get here if the URLs match correctly and case sensitively.
echo "Matches" . PHP_EOL;
} else {
// we get here if the URLs don't case sensitively match
echo "Doesn't match" . PHP_EOL;
}
它在不匹配部分我遇到了麻烦,因为这是我必须构建 rel= "canonical" url 的地方,它应该是替换 ([^/]+) 的 $page['uri'] 版本与 $URI 的那部分包含的任何内容。