更新:事实证明,以下是由我的生产服务器上的缓存问题引起的。感谢所有提供深思熟虑答案的人。
我在php页面上有一个简单的函数,它带有一个url,例如:
http://myurl.com/mypage.html?param1=value1
并将其转换为:
http://myurl.com/searchpage.html?param1=value1
所有这一切都换掉了page.html部分。
为此,我使用以下内容:
$currentUrl = $this->getCurrentUrl(); // Grabs the current url, i.e 'http://myurl.com/mypage.html?param1=value1' // Derive a search pattern from the current url $pattern = "/" . str_replace(array("/", ".", "-"), array("\\/", "\\.", "\\-"), $currentUrl) . "/"; // get rid of the 'mypage.html' $newUrl = preg_replace($pattern, 'http://myurl.com/', $currentUrl); // replace the question mark with the correct page $newUrl = str_replace("/?", "/searchpage.html?", $newUrl);
上面的代码不是确切的代码,但是很好的代表。它在一台服务器上运行得很漂亮,但是当我推向生产时,preg_replace不起作用。我最初尝试使用str_replace。它也适用于我的本地开发机器,但不适用于生产服务器。
我已确认网址变量正确输入。有什么想法吗?
答案 0 :(得分:2)
这令人非常费解(很遗憾地说)。为什么不呢:
$newUrl = preg_replace('!\bmypage\.html\b!', 'searchpage.html', $oldUrl);
答案 1 :(得分:0)
你为什么不这样做
$pieces = explode('/',$url);
str_replace('mypage','searchpage',$pieces[2]);
$newURL = implode('/',$pieces);
比使用正则表达式更好。