如何使用mod_Rewrite检查多个文件夹中的静态文件

时间:2010-02-01 12:40:20

标签: apache mod-rewrite

用于检查给定文件的多个文件夹位置的mod_Rewrite规则是什么。例如,如果我有一个文件夹结构:

public/
    css/
    library1/
        css/
    library2/
        css/

我希望/css/somefile.css首先检查public/css/目录,然后级联到public/library1/css/然后public/library2/css/,如果在任何资源中找不到资产,则返回404目录。

我正在思考:

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond library1%{REQUEST_URI} -f
RewriteRule ^(.*)$ library1$1 [L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond library2%{REQUEST_URI} -f
RewriteRule ^(.*)$ library2$1 [L]

但这似乎不起作用 - 我不确定如何在动态生成的路径上检查文件是否存在。

4 个答案:

答案 0 :(得分:6)

请尝试以下规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/library1%{REQUEST_URI} -f
RewriteRule ^css/.+ library1%{REQUEST_URI} [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/library2%{REQUEST_URI} -f
RewriteRule ^css/.+ library2%{REQUEST_URI} [L]

答案 1 :(得分:1)

RewriteMap Directive可能会有所帮助。

答案 2 :(得分:1)

服务器变量可能不包含您的想法。尝试将日志记录增加到调试,这样您就可以确切地看到正在发生的事情。

答案 3 :(得分:0)

试试这个:

# Loads files from production server
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (library1|library2)/(.*)$ http://production.com/$1/$2 [R=302,L,NC]

实现这一目标:

something.dev/ library1 /style.css - > production.com/library1 / 的style.css something.dev/library2 / vendor / css / style.css - > production.com/library2 / 供应商/ CSS / style.css中