0

更新: 結局のところ、以下は実稼働サーバーのキャッシュの問題が原因です。思慮深い回答を提供してくれたすべての人に感謝します。

次のようなURLを受け取るphpページに単純な関数があります。

http://myurl.com/mypage.html?param1=value1

そしてそれを次のように変換します:

http://myurl.com/searchpage.html?param1=value1

page.html の部分を入れ替えるだけです。

これを行うには、次を使用します。

$currentUrl = $this->getCurrentUrl(); // 現在の URL を取得します。つまり、'http://myurl.com/mypage.html?param1=value1' です。

// 現在の URL から検索パターンを導き出す
$pattern = "/" . str_replace(array("/", ".", "-"), array("\\/", "\\.", "\\-"), $currentUrl) . "/";

// 「mypage.html」を取り除く
$newUrl = preg_replace($pattern, 'http://myurl.com/', $currentUrl);

// 疑問符を正しいページに置き換えます
$newUrl = str_replace("/?", "/searchpage.html?", $newUrl);

上記のコードは正確なコードではありませんが、適切な表現です。1 つのサーバーでは問題なく動作しますが、本番環境にプッシュすると、preg_replace が機能しません。最初に str_replace を使用しようとしました。ローカルの開発マシンでも動作しますが、運用サーバーでは動作しません。

URL変数が正しく入っていることを確認しました。何か案は?

4

2 に答える 2

2

それは恐ろしく複雑です(言って申し訳ありません)。それだけではない理由:

$newUrl = preg_replace('!\bmypage\.html\b!', 'searchpage.html', $oldUrl);
于 2010-04-01T23:57:16.883 に答える
0

やってみませんか

$pieces = explode('/',$url);
str_replace('mypage','searchpage',$pieces[2]);
$newURL = implode('/',$pieces);

正規表現を使用するよりもはるかに優れています。

于 2010-04-02T00:15:06.797 に答える