目前,我有一个像这样定义的 VirtualHost:
<VirtualHost *:80>
ServerName mydomain.com
ServerAlias otherdomain.com
DocumentRoot /var/www/project/
</VirtualHost>
如何创建仅影响otherdomain.com
域的别名:
Alias /sub /var/www/other
以便:
http://otherdomain.com/sub -> /var/www/other
http://mydomain.com/sub -> /var/www/project/sub
实际上,所讨论的 VirtualHost 并不那么简单,因此我宁愿不为此单独创建 VirtualHost。是否有任何条件表达式或类似表达式可以在 VirtualHost 中使用?类似这样的表达式:
<VirtualHost *:80>
...
<If ServerName=otherdomain.com>
Alias /sub /var/www/other
</If>
</VirtualHost>
答案1
不,您不能在 If 中使用别名。
If "%{HTTP_HOST}
与 Alias 不兼容,使用它将导致 Apache 无法启动并输出错误消息:
Alias not allowed here
您应该创建另一个具有相应名称并配置您的别名的 VirtualHost。
答案2
以下是 Apache 文档的相关部分:
http://httpd.apache.org/docs/trunk/mod/core.html#if
和
http://httpd.apache.org/docs/trunk/expr.html
在这种情况下,类似这样的事情应该有效:
<If "%{HTTP_HOST} == 'example.com'">
Alias /sub /var/www/other
</If>
我相信您需要 Apache 2.2 或更高版本才能实现“If”功能。
答案3
我认为我已经找到解决方法了。
<Directory /var/www/other>
Require all denied
<If "%{HTTP_HOST} == 'example.com'>
Require all granted
</If>
</Directory>
Alias /sub /var/www/other
<If>
+ /var/www/other 内的 .htaccess 文件中的要求也应该可以工作。