【问题标题】:HTACCESS Rewrite: Ignore another rewrite ruleHTACCESS 重写:忽略另一个重写规则
【发布时间】:2017-04-29 03:17:23
【问题描述】:

我使用重写规则有两个目的。首先,我能够将 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 以忽略之前的规则?

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案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

    【讨论】:

    • 如何修改^(?!assets/) 以添加要忽略的附加目录?
    • 你可以这样使用它:RewriteRule ^(?!(assets|dir2|dir3)/)(.+)$ index.php/$1 [L,NC]
    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 2017-05-03
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2018-11-13
    相关资源
    最近更新 更多