0

我正忙着为我的 MVC 微框架找出重写规则。我遵循url.com/:controller/:action/:params模式,但是当请求资产(例如 css、js 或 png)时,我不希望这些被重写。这是我的基本文件夹结构:

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 模式匹配得很好,但由于某种原因,对 assets 文件夹的任何请求也会被重写。做了一些不同的测试,我发现L标志,据我所知,它的意思是“最后一个”,并没有阻止它处理进一步的重写。

我知道其他人以前必须处理过这个问题,因为 MVC 是一种常见的模式。谁能指出我做错了什么?

4

1 回答 1

1

尝试排除该文件夹:

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

我使用:

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

代替:

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
于 2013-01-15T13:46:46.730 回答