【发布时间】:2013-01-15 13:42:24
【问题描述】:
我正忙着为我的 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 是一种常见的模式。谁能指出我做错了什么?
【问题讨论】:
标签: php .htaccess mod-rewrite url-routing