Wal*_*han 8 .htaccess mod-rewrite
我有一个网站example.com/test/.让我们说网站的布局如下:
example.com
??? test/
??? assets/
? ?? stylesheet.css
?
??? .htaccess
??? index.php
Run Code Online (Sandbox Code Playgroud)
index.php 这是路由器,现在看起来很酷.
每当用户请求类似的页面时example.com/test/stylesheet.css,我想检查是否assets/有该文件,如果有,请提供该文件而不是提供URL index.php.理想情况下,以下方法可行:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond assets/%{REQUEST_FILENAME} -f
RewriteRule ^(.+)$ assets/$1
Run Code Online (Sandbox Code Playgroud)
但既然%{REQUEST_FILENAME}是一条绝对的道路,assets/%{REQUEST_FILENAME}那就像是一样assets/home/public/test/stylesheet.css.%{REQUEST_URI}不是更好:它变成了assets/test/stylesheet.css.我也看了这个问题,但答案也没有用.
有没有办法,没有诉诸PHP,这样做?(如果没有,我只会使用PHP readfile,但我不想担心LFI或其他任何东西.)
尝试使用the %{DOCUMENT_ROOT}和%{REQUEST_URI}vars
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/assets/%{REQUEST_URI} -f
RewriteRule ^(.+)$ assets/$1
Run Code Online (Sandbox Code Playgroud)
编辑:我明白了,试试这个:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.+)$
RewriteCond %{DOCUMENT_ROOT}/%1/assets/%2 -f
RewriteRule ^(.*)$ /%1/assets/%2 [L,R]
Run Code Online (Sandbox Code Playgroud)