2016-12-13 148 views
2

我使用重寫規則有兩個目的。首先,我可以將URL重寫爲我的.css和.js文件,以便通過最小化腳本處理它們。這一直工作正常:HTACCESS重寫:忽略另一個重寫規則

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 

我怎樣才能重新路由到index.php忽略預vss規則與我的CSS和JS重寫?

回答

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] 

另外請注意,您可以用更短的\w

+1

真棒更換[a-zA-Z0-9_],謝謝。 – JROB

+0

我該如何修改'^(?! assets /)'來添加一個額外的目錄來忽略? – JROB

+0

你可以像這樣使用它:'RewriteRule ^(?!(assets | dir2 | dir3)/)(。+)$ index.php/$ 1 [L,NC]' – anubhava