让mod_rewrite做我需要它做的事情我有点困难。
我们在Drupal安装中有一组虚拟子域。因此,academics.univ.edu,about.univ.edu等都是同一核心Drupal安装的一部分。
目前文件访问是academics.univ.edu/sites/all/academics/files/myfile.jpg。但是,此路径也可以作为about.univ.edu/sitse/all/about/files/myfile.jpg或任何其他有效的子域。
我们想使用mod_rewrite接受academics.univ.edu/files/myfile.jpg并从上述位置传送文件。
这是我尝试过的:
RewriteCond %{REQUEST_URI} ^(about|academics|bursar|calendar)\.univ\.edu\/files\/(.*)$ [NC]
RewriteRule ^/sites/all/files/$1/$2 [L,NC]
我可能会以错误的方式解决这个问题,但我想检查一下。我可以通过使用HTTP_HOST制作单独的规则来使子域工作,但我希望文件中的规则更少。此外,我无法让HTTP_HOST在作为子虚拟主义的子目录存在的网站上工作。例如,undergrad.univ.edu / biology / files / myfile.jpg应提供/sites/all/biology/files/myfile.jpg
答案 0 :(得分:2)
您无法匹配%{REQUEST_URI}中的主机,您需要使用%{HTTP_HOST},然后使用%1
反向访问该匹配。实际的URI可以在规则本身中匹配。像这样:
RewriteCond %{HTTP_HOST} ^(about|academics|bursar|calendar)\.univ\.edu$ [NC]
RewriteRule ^files/(.*)$ /sites/all/files/%1/%2 [L,NC]
%1
引用RewriteCond中的匹配(about|academics|bursar|calendar)
,$1
引用RewriteRule中的匹配(.*)
。因此,该示例将向http://about.univ.edu/files/foo.html发送请求,并将请求重写为/sites/all/files/about/foo.html
。
此外,如果这是在虚拟主机或服务器配置中,则在RewriteRule中的“^”和“files”之间需要“/”。