mod_rewrite:如果该文件存在于另一个目录中,请改为使用该文件

时间:2012-08-20 01:32:25

标签: .htaccess mod-rewrite

我在example.com/test/有一个网站。让我们说网站的布局如下:

example.com
└── test/
    ├── assets/
    │   └─ stylesheet.css
    │
    ├── .htaccess
    └── index.php

index.php这是路由器,现在显然很酷。

每当用户请求example.com/test/stylesheet.css这样的网页时,我想检查assets/是否包含该文件,如果是,请提供该文件,而不是将网址提供给index.php 。理想情况下,以下方法可行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond assets/%{REQUEST_FILENAME} -f
RewriteRule ^(.+)$ assets/$1

但由于%{REQUEST_FILENAME}是绝对路径,assets/%{REQUEST_FILENAME}原来是assets/home/public/test/stylesheet.css%{REQUEST_URI}并不是更好:它变成了assets/test/stylesheet.css。我也看了this question,但答案也没有用。

有没有办法,不使用PHP,这样做? (如果没有,我只会使用PHP的readfile,但我不想担心LFI或其他任何东西。)

1 个答案:

答案 0 :(得分:9)

尝试使用the %{DOCUMENT_ROOT}%{REQUEST_URI} vars

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/assets/%{REQUEST_URI} -f
RewriteRule ^(.+)$ assets/$1

编辑:我明白了,试试这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.+)$
RewriteCond %{DOCUMENT_ROOT}/%1/assets/%2 -f
RewriteRule ^(.*)$ /%1/assets/%2 [L,R]