[英]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¶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模式匹配得很好,但是由于某种原因,对资产文件夹的任何请求也会被重写。 通过进行各种测试,我发现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.