我是Apache的mod_rewrite新手,我有一些困难得到它做我想要的。
在我的静态目录中,我有一些JavaScript文件( .js )与2种文件名:
xxxx.js这是标准的文件名 AT_xxxx.js (带有前缀的文件名),与以前的标准文件名重复,但也包含我的自定义 我想parsing每个标准请求的JavaScript文件( xxxx.js )的请求,以检查包含所有子目录的自定义文件是否存在( AT_xxxx.js )。 然后,在这种情况下,使用自定义文件而不是标准文件(也许通过内部redirect)。
我试图弄清楚这个好几个小时,但还是有一些错误。
注意:另外,我不知道如何在子目录中find自定义文件。
DocumentRoot "/data/apps/dev0/custom/my_static" <filesMatch "\\.(js)$"> Options +FollowSymLinks RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/AT_$1.js -f RewriteRule ^(.*[^/])/?$ %{DOCUMENT_ROOT}/AT_$1.js [QSA,L] </filesMatch>
在你的RewriteCond中你有一个反向引用($ 1)。 但是为了使用反向引用,你首先必须捕获某些内容。 尝试这样的事情:
RewriteCond %{REQUEST_URI} ^/(.*).js$ RewriteCond %{DOCUMENT_ROOT}/AT_%1.js -f RewriteRule ^(.*[^/])/?$ %{DOCUMENT_ROOT}/AT_$1.js [QSA,L]
上面发生的情况是,第一个条件检查请求的URI是否以.js结尾,如果是,则将文件名(最多为.js)存储在RewriteCond反向引用%1中。 然后第二个检查是否存在文件名(虽然以AT_开头),如果是的话,重写它。
我find了:
<filesMatch "\\.(js)$"> # Split into two variables, $1 is everything before the filename, $2 the filename without extension RewriteCond %{REQUEST_FILENAME} ^(.+)/([^/]+)\.js$ # Add AT_ prefix and check if file exists RewriteCond %1/AT_%2.js -f # Internal Redirect with new file with AT_ prefix RewriteRule ^(.+)/([^/]+)\.js$ %1/AT_%2.js [NC,L] </filesMatch>