繁体   English   中英

MVC的Htaccess重写规则

[英]Htaccess Rewrite Rules for MVC

我真想弄清楚我的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模式匹配得很好,但是由于某种原因,对资产文件夹的任何请求也会被重写。 通过进行各种测试,我发现L标志(据我所理解的意思是“ last”)不会阻止它进行进一步的重写。

我知道其他人必须先解决此问题,因为MVC是一种常见的模式。 有人可以指出我做错了吗?

尝试排除该文件夹:

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

我用:

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

代替:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM