![Apache:将多个目录映射到同一位置](https://linux22.com/image/629447/Apache%EF%BC%9A%E5%B0%86%E5%A4%9A%E4%B8%AA%E7%9B%AE%E5%BD%95%E6%98%A0%E5%B0%84%E5%88%B0%E5%90%8C%E4%B8%80%E4%BD%8D%E7%BD%AE.png)
我想使用 Apache 将多个目录映射到同一位置,期望出现类似以下行为:假设该位置由目录和/static
支持。然后,如果请求,我希望 Apache 按顺序检查文件和。返回找到的第一个文件;如果未找到任何文件,则返回经典错误 404。/srv/static1
/srv/static2
/static/image.png
/srv/static1/image.png
/srv/static2/image.png
当然,一种解决方案是使用脚本创建指向正确位置的符号链接目录,然后使用这个目录,例如在指令中Alias
。我想知道是否有更直接的方法,不需要我部署额外的机器。
谢谢!
答案1
使用 mod_rewrite 可以轻松完成此操作。您可以设置一个条件,如果文件在第一个目录中不存在,则它应该在第二个目录中查找,依此类推。
以下是一个简短的示例配置;有关更多信息,请参阅典型的 mod_rewrite 问题和apache 的 mod_rewrite 文档。
RewriteEngine on
# first try to find it in dir1/...
# ...and if found stop and be happy:
RewriteCond %{DOCUMENT_ROOT}/dir1/%{REQUEST_URI} -f
RewriteRule ^(.+) %{DOCUMENT_ROOT}/dir1/$1 [L]
# second try to find it in dir2/...
# ...and if found stop and be happy:
RewriteCond %{DOCUMENT_ROOT}/dir2/%{REQUEST_URI} -f
RewriteRule ^(.+) %{DOCUMENT_ROOT}/dir2/$1 [L]
# else go on for other Alias or ScriptAlias directives,
# etc.
RewriteRule ^ - [PT]