2013-01-15 125 views
0

我有上的時間試圖找出重寫規則爲我的MVC microframework地獄。我正在關注的模式url.com/:controller/:action/:params但是當請求的資產(如CSS,JS,或png),我不希望那些被改寫。這裏是我的基本的文件夾結構:.htaccess的重寫規則MVC

index.php 
app/ 
--> Config 
--> Controllers 
--> Layout 
--> Lib 
--> Models 
--> Views 
assets/ 
--> app/ 
    --> ... 
--> vendor/ 
    --> ... 

所以,如果要求我上面描述的URL模式匹配,我希望它路由到index.php文件。如果它匹配的資產文件夾的東西,我希望它允許它要經過不受影響。

這是當前的.htaccess我創建並已改變的東西來回:

RewriteEngine On 
RewriteBase/

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\.(jpg|png|js|css)$ 

RewriteRule ^([^/]+)(/)([^/]+)(/)(.*) index.php?controller=$1&action=$3&params=$5 [L] 
RewriteRule ^([^/]+)(/)(.*) index.php?controller=$1&action=$3&params= [L] 
RewriteRule ^([^/]+)(/) index.php?controller=$1&action=index&params= [L] 
RewriteRule ^([^/]+) index.php?controller=$1&action=index&params= [L] 

URL模式匹配的罰款,但由於某些原因的資產文件夾的任何請求也得到改寫。做一些不同的測試,我發現大號標誌,我的理解是指「最後」,不會處理進一步重寫阻止它。

我知道其他人不得不爲MVC是這樣一個共同的模式之前,已經處理了這個問題。任何人都可以指出我做錯了什麼嗎?

回答

1

試用排除該文件夾:

RewriteCond %{REQUEST_URI} ^/assets.*$ 
RewriteRule ^(.*)$ - [L,NC] 

,而且我用:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

相反的:

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
+0

我會被定罪。對我來說,這太容易了很久了。非常感謝!我會盡快接受它,因爲它會允許我。 –

+0

不客氣!這是否解決了?排除文件夾或更改請求方法? –

+0

我實現了兩個......我想像不包括文件夾,雖然有最大的變化。 –