很快:我希望htaccess决定重写哪两个css文件,具体取决于哪一个。
详细说明:我想以vendor / project / style.css格式包含我的css(后来的js,字体等)
<link rel="stylesheet" type="text/css" href="/vendor/project/style.css">
假设每个项目都可以通过composer安装,因此它位于vendor文件夹中。所以重写很容易:
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ vendor/$1/$2/$3.css [L]
但是:您也可以直接克隆每个项目作为根项目,因此它不会落在vendor文件夹中。然后重写应该如下:
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ $3.css [L]
我现在的问题是:我怎么告诉apache检查哪个文件确实存在?我试过像:
RewriteCond %{REQUEST_FILENAME} ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$
RewriteCond %{DOCUMENT_ROOT}/vendor/%1/%2/%3\.css -f
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ vendor/$1/$2/$3.css [L]
RewriteCond %{REQUEST_FILENAME} ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$
RewriteCond %{DOCUMENT_ROOT}/%3\.css -f
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ $3.css [L]
但完全没有成功。
答案 0 :(得分:0)
请尝试以下方法:
RewriteEngine On
# Check to see if file exists in `vendor`
RewriteCond %{REQUEST_URI} ^/(\w+)/(\w+)/(.+)\.css$
RewriteCond %{DOCUMENT_ROOT}/vendor/%1/%2/%3.css -f
RewriteRule ^ vendor/%1/%2/%3.css [L]
# Check to see if file exists in directory root
RewriteCond %{REQUEST_URI} ^/(\w+)/(\w+)/(.+)\.css$
RewriteCond %{DOCUMENT_ROOT}/%3.css -f
RewriteRule ^ %3.css [L]
您可以查看REQUEST_URI
,无需再次检查规则(请注意重写目标中的%
)。此外,已将匹配组更改为使用\w+
- 这是您之前所拥有的简写,但*
已替换为+
,因为前者会检查为空字符串也是。
这已在我的本地服务器上进行了测试,并按预期工作。