2013-10-08 68 views
2

我已經開發了一個小的(和強大的輕便:-D)PHP MVC框架路由和SEFURL用的.htaccess

我目前遇到的問題是: 路線遵循此順序

的index.php?選擇= samplemodule &行動= sampleController

爲ZF用來做前一陣子那將鏈接到samplemodule和將執行sampleController,漂亮多了。

我試圖獲得的.htaccess重寫規則 /模塊/動作

但由於某種原因它不工作,這裏的一塊代碼

RewriteEngine On # Turn on the rewriting engine 
RewriteCond %{SCRIPT_FILENAME} -f 
RewriteRule^- [L] 
RewriteRule  ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ index.php?option=$1&action=$2 [NC,L] 
RewriteRule  ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)?$ index.php?option=$1&action=$2 [NC,L] 
RewriteRule  ^([A-Za-z0-9-]+)/?$ index.php?option=$1&action=main [NC,L] 
RewriteRule  ^([A-Za-z0-9-]+)?$ index.php?option=$1&action=main [NC,L] 

與處理的正則表達式是相當困難的

我也喜歡它,傳遞變量時,這些可能是 /模塊/動作/ VAR1/VALUE1形式/ VAR2 /值2

但我不確定重寫模式引擎是如何工作的......它是否遞歸地使用多個規則?

回答

1

它是否遞歸使用多個規則?

它的確如此,但並不像聽起來那麼簡單。

至於URL模式,可以無限期繼續下去,如:/模塊/動作/ VAR1/VALUE1/VAR2 /值2

你可以嘗試這樣的事:

# turn everything after /module/action/XXXX to query string variables 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^/]+)/([^/]+)(.*)$ /$1/$2/$5?$3=$4 [L,QSA] 

# turn /module/action/ into option= and action= 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?option=$1&action=$2 [L,QSA] 

# turn /module/ into option= and action=main 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?option=$1&action=main [L,QSA] 
+0

是啊,這應該工作,正則表達式真棒,謝謝,但... –

+0

它不工作大聲笑。所以如果你把L引用結尾,它會把它作爲最後的規則,它不會繼續分析。問題是...我該怎麼做才能保持重寫? 。所以我們可以說我有以下字符串 var1/a/var2/b/var3/c/var4/d/var5/d/var6/f 程序將匹配第一個var1/a/var2/a,然後剩下的/ var3/c/var4/d ....爲其他兩個不匹配的規則:S –