2013-09-26 55 views
0

基本上,我想從URL模式映射到另一個URL模式。例如:使用匹配的模式重寫一個新的模式

news.php?id=(\d+) -> news/$1 

我設法用一個簡單的循環完成以下操作。

$url = "news.php?id=24"; 
$pattern = "/news.php\?id=(\d+)/"; 
$rewrite = "news/$1"; 

if (preg_match($pattern, $url, $match)) 
{ 
    for($i = 1; $i < count($match); $i++) { 
     $rewrite = str_replace("\${$i}", $match[$i], $rewrite); 
    } 
} 

var_dump($rewrite); 
// output: news/24 

我不知道是否有更好的方法或本地PHP函數可以做一個類似的事情嗎?

注意:請不要使用.htaccess,因爲我試圖建立一個路由系統,上面只是我插入實際引擎之前測試的示例代碼。

+0

自從我做了這些事情之後已經有一段時間了,但是preg_replace()不適合嗎? – andyc

+0

如何實現沒有'.htaccess'的路由器??!你可能希望你'.htaccess'在沒有繁重條件的情況下是純粹的。 – Yang

+0

而且,只有擁有「前端控制器」時,路由器纔有意義。 – Yang

回答

0

這會更容易嗎?

preg_replace("/news.php\?id=(\d+)/","news/$1","news.php?id=24") 
+0

您有preg_replace參數的順序不正確。它應該是'preg_replace(「/ news.php \?id =(\ d +)/」,「news/$ 1」,「news.php?id = 24」)。請參閱:http://php.net/manual/en/function.preg-replace.php – andyc

+0

謝謝!將更新答案給正確的答案(爲後代)。 – Vlad