为特定的 ServerAlias 设置 Apache Alias

为特定的 ServerAlias 设置 Apache Alias

目前,我有一个像这样定义的 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 文件中的要求也应该可以工作。

相关内容