我目前正在开发一个与另一个旧项目相关的新项目。这个旧项目允许用户上传头像,导致 中的文件没有版本控制/images/avatars
。
但在新项目中,我也需要这些头像文件。因此,我将头像目录放在项目之外,并使用 apache 别名来提供文件:
...
Alias "/images/avatars" "<path/to/shared>/images/avatars"
...
工作正常。
但是,问题出在该文件上/images/avatars/default.png
,它实际上是唯一一个需要版本控制的文件。而且旧项目团队不时需要更新它。因此,他们提交它并将其推送到 git,但是当我们要求 git 将其拉取时,它会执行每个人所期望的操作:将文件上传到原始目录 ( images/avatars/
) 而不是别名目录中。如此继续,当我们default.png
在网页上显示时,apache 会按照别名显示复制的版本(即旧版本)。
不知道如何解决这个问题。我很想说“嘿,Apache,让我们为所有头像都使用这个别名,但 default.png 有一个小小的例外,可以吗?”但生活并没有那么简单,不是吗?
答案1
我终于找到了解决方案。我不应该使用“Alias”,而应该使用“AliasMatch”,如下所示:
...
AliasMatch "^/images/avatars((?!/default\.png).*)" "<path/to/shared>/images/avatars$1"
...
这部分((?!/default\.png).*)
正在施展魔法。它将捕获除匹配之外的所有内容default.png
。