在不使用符号链接的情况下在 Apache 中创建虚拟目录的正确方法是什么?

在不使用符号链接的情况下在 Apache 中创建虚拟目录的正确方法是什么?

我以前使用过 IIS,在那里设置虚拟目录非常简单。只需右键单击并添加指向您喜欢的任何路径的“虚拟目录”。查看网站时,此相对路径会反映在浏览器中。

我如何使用 Apache 完成同样的任务?符号链接让我害怕,因为删除会级联。有没有更好的方法在 Apache 中创建虚拟目录?我正在使用 MAMP for Mac,它使用 apache2。

答案1

使用AliasApache 配置文件中的指令。

Alias /virtual-dir /var/www/foo

此外,rm -r不会遍历符号链接并且不会级联。

答案2

如果您将多个域指向同一个公共 html 目录,并且实际内容位于公共 html(Web 根目录)之外,则可以分两步执行此操作:

1)重写每个域的目录,例如

<VirtualHost 127.0.0.1:80>
  ServerName host_one.ca
   RewriteEngine On
    RewriteRule "/?images(.*)" "/www/shared/host_one/images/$1" [NC]
</VirtualHost>
<VirtualHost 127.0.0.1:80>
  ServerName host_two.ca
   RewriteEngine On
    RewriteRule "/?images(.*)" "/www/shared/host_two/images/$1"
</VirtualHost>

2)然后添加符号链接(或者别名)

ln -s /shared/host_one/images /www/html/images/host_one
ln -s /shared/host_two/images /www/html/images/host_two

只要小心一点。host_two 图像可以通过 host_one 访问:domain_one.ca/images/host_two/{filename}

除非你添加额外的规则,删除当前主机目录中不存在的任何内容。对于 host_one VirtualHost(我做了不是确认此规则是否有效):

    # prevent showing content from other hosts
    RewriteRule "/?images/!(host_one/.*)" /404 [NC,L]

答案3

如果它是安全服务器,则“别名”目录也需要转到 VirtualHost 443 配置中

<VirtualHost *:443>
...
Alias /virtual-dir /var/www/foo
</VirtualHost>

相关内容