首先,抱歉我的英语不太好。但让我解释一下我遇到的 apache vhosts 问题。
示例:我的服务器名称是 example.de (/etc/hostname)。如果我针对此特定域进行配置,我的虚拟主机将无法工作。看来 apache 使用默认虚拟主机。但我需要默认虚拟主机来处理服务器上未激活的页面。因此,我无法将其用于域 example.de
我需要以下问题的解决方案:
- example.de - 应该指向 /var/www/example(这不起作用,因为 /etc/hostanme)
- example2.de - 应该指向 /var/www/example2 (这有效)
- domain-i-got-but-not-active.de 应该指向 /var/www/default (这可行,但也会捕获 example.de)
我无法更改我的主机名,因为如果服务器名称设置不正确,从我的服务器发送的邮件将被检测为垃圾邮件。
下面是我的虚拟主机的一个示例:
# For default-pages
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/default
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/default>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
# Doesn´t work, points to default (above code)
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example.de
DocumentRoot /var/www/example
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/example>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
# All fine
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example2.de
DocumentRoot /var/www/example2
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/example2>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
答案1
根据Apache 文档:
如果未指定 ServerName,则服务器将尝试通过对 IP 地址执行反向查找来推断主机名。
反向查找:查找 IP 地址以找到该 IP 地址的域名。
我猜这就是为什么example.de
默认提供服务的原因VirtualHost
,因此尝试添加ServerName domain-i-got-but-not-active.de
,如果这VirtualHost
是第一个定义:
它具有最高优先级,可以视为默认或主服务器。这意味着如果收到的请求与指定的 ServerName 指令之一不匹配,则将由第一个 VirtualHost 提供服务。
答案2
<VirtualHost *:80>
DocumentRoot /var/www/example
DirectoryIndex index.php
ServerName example.de
setEnv DOMAIN_NAME example.de
<Directory "/var/www/example">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
</VirtualHost>
尝试这个