HTACCESS重写:忽略另一个重写规则

时间:2016-12-13 22:29:03

标签: regex apache .htaccess mod-rewrite

我使用重写规则有两个目的。首先,我能够将URL重写为我的.css和.js文件,以便通过最小化脚本处理它们。这一直很好:

RewriteEngine on
RewriteRule ^assets/css/min/([a-zA-Z0-9\._-]+)/([a-zA-Z0-9\._-]+)/([a-zA-Z0-9\._-]+)\.css$ assets/css/min.php?style=$1&theme=$2&ver=$3 [L,QSA]
RewriteRule ^assets/js/min/([a-zA-Z0-9\._-]+)/([a-zA-Z0-9\._-]+)\.js$ assets/js/min.php?scripts=$1&ver=$2 [L,QSA]

但是,现在我添加了一条规则,将不存在的页面的所有流量重定向到我的index.php文件(用于MVC路由):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php/$1 [L]
RewriteBase /

问题是,现在我的HTACCESS文件中有这两个规则,我无法再访问我的.css或.js文件,如:

http://domain.tld/assets/css/min/all/default/0.2.3.css

如何通过我的css和js重写将index.php重新路由到忽略之前的规则?

1 个答案:

答案 0 :(得分:1)

您可以在最后一条规则中使用否定前瞻来跳过assets/目录:

RewriteEngine on

RewriteRule ^assets/css/min/([\w.-]+)/([\w.-]+)/([\w.-]+)\.css$ assets/css/min.php?style=$1&theme=$2&ver=$3 [L,QSA]

RewriteRule ^assets/js/min/([\w.-]+)/([\w.-]+)\.js$ assets/js/min.php?scripts=$1&ver=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?!assets/)(.+)$ index.php/$1 [L,NC]

另请注意,您可以使用较短的[a-zA-Z0-9_]

替换\w