.htaccess重写除图像,脚本和样式表之外的所有内容

时间:2015-07-03 02:16:57

标签: regex apache .htaccess

我有一个包含两个目录的Web项目:" core"和"公共"。

"核心"包含Model-View-Controller所需的所有控制器,视图和文件。

"公共"包含可以直接访问的所有公共文件,如js,css和less。

我在主目录中有以下.htaccess

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI}  !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.css|\.js|\.less|\.coffee)$
    RewriteRule    ^$    core/    [L]
    RewriteRule    (.*) core/$1    [L]
 </IfModule>

但是,它仍会将这些文件重写为核心&#39; 。目录

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我建议你改用它:

RewriteEngine on

# First, check if a specific type is being requested
RewriteCond %{REQUEST_URI} !\.(png|jpg|gif|jpeg|bmp|css|js|less|coffee)$ [NC]
# Second, check if the request is for an existing file
RewriteCond %{REQUEST_FILENAME} -f
# If both conditions are true, then skip rewriting
RewriteRule ^ - [L]

# Otherwise, continue:
RewriteRule ^$   core/   [L]
RewriteRule (.+) core/$1 [L]

将资产发送到core的原因是因为条件仅适用于第一条规则,即适用于您的应用程序索引的规则。如果正在请求资产,则使用此方法会导致mod_rewrite跳过重写。一旦它这样做,它可以继续所有其他规则。