2011-05-07 76 views
3

嘿傢伙,一個小問題。使用PHP更改.htaccess - 刪除重寫規則

我使用PHP一旦頁面已被刪除刪除/添加靜態頁面,我希望能夠從的.htaccess刪除它,但我已經試過這一點,但它拋出一個錯誤:

Warning: preg_replace() [function.preg-replace]: Unknown modifier '\' in ...

代碼:

$page_name = $row['page_name']; // Example: help 

preg_replace('/RewriteRule ' . preg_quote('^' . $page_name . '/?$ page.php?mode=') . '.*/i', '', $htaccess); 

這是什麼,應該完全刪除例如:

RewriteRule ^help/?$ page.php?mode=help 
+0

您想使100%確定此腳本非常合適安全。允許PHP根據任何用戶輸入修改'.htaccess'可能會導致任何*結果在那裏,如果你不小心我知道這一點只是刪除的東西,但大概它被添加到其他地方?請確保沒有辦法可以被濫用。至少,確保它只是您期望的字符,最大長度有限等等。 – Basic 2011-05-07 22:51:34

+0

該腳本僅由管理員在製作自定義靜態頁面時輸入,而不是匿名用戶。 – MacMac 2011-05-07 22:53:08

+0

如果是這樣,你知道a)所有管理員都可以信任,並且b)你的驗證/驗證/授權機制是防彈的,那麼我同意這不是一個風險。我仍然試圖嘗試尋找替代方案,儘管可行 - 但這只是一個人的觀點:) – Basic 2011-05-07 22:55:47

回答

2

你必須通過傳遞它來轉義表達式分隔符作爲第二個參數到preg_quote

preg_replace('/RewriteRule ' . preg_quote('^' . $page_name . '/?$ page.php?mode=', '/') . '.*/i', '', $htaccess); 

否則你的/將不會被轉義。如文檔中所述「特殊的正則表達式字符是:。\ + *?[^] $(){} =!<>: - 」

0

使用像這樣

preg_replace(「~~ msi」,「要替換的模式」)。 此外 - 良好practive是由行不是 - 所有文字一次性改變!

所以

的foreach(文件(.htaccess)是否爲$線)
{

,並在每一行更換, }

比輸出所有,舊的.htaccess的商店副本。 ..

,Arsen

+0

對不起。我無法理解你在說什麼。你能再澄清一點嗎? – MacMac 2011-05-07 22:52:04