我在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或其他任何东西。)
答案 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]