我正忙着为我的 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¶ms=$5 [L]
RewriteRule ^([^/]+)(/)(.*) index.php?controller=$1&action=$3¶ms= [L]
RewriteRule ^([^/]+)(/) index.php?controller=$1&action=index¶ms= [L]
RewriteRule ^([^/]+) index.php?controller=$1&action=index¶ms= [L]
url 模式匹配得很好,但由于某种原因,对 assets 文件夹的任何请求也会被重写。做了一些不同的测试,我发现L标志,据我所知,它的意思是“最后一个”,并没有阻止它处理进一步的重写。
我知道其他人以前必须处理过这个问题,因为 MVC 是一种常见的模式。谁能指出我做错了什么?