Domanda

UPDATE: Come si è visto, il seguito è causato da un problema di cache sul mio server di produzione. Grazie a tutti coloro che hanno fornito le risposte riflessivo.

Ho una funzione semplice in una pagina php che prende un URL, ad esempio:

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

e lo converte in:

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

Tutto ciò che fa è scambiare la porzione page.html.

Per fare questo, io uso il seguente:

$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);

Il codice di cui sopra non è il codice esatto, ma è una buona rappresentazione. Esso funziona in modo bello su un unico server, ma quando spingo per la produzione, il preg_replace non funziona. All'inizio ho cercato di usare str_replace. Funziona anche sulla mia macchina di sviluppo locale, ma non sul server di produzione.

mi hanno confermato che le variabili URL stanno arrivando in modo corretto. Tutte le idee?

È stato utile?

Soluzione

Questo è orribilmente contorto (dispiace dirlo). Perché non solo:

$newUrl = preg_replace('!\bmypage\.html\b!', 'searchpage.html', $oldUrl);

Altri suggerimenti

Perché non basta fare

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

Meglio di utilizzare espressioni regolari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top