2013-01-15 127 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

我实现了两个......我想像不包括文件夹,虽然有最大的变化。 –