在 Ubuntu 2016.04 的默认 Apache2 中,我尝试添加一个具有别名的虚拟主机:
sudo mkdir /var/www/simplesamlphp
echo "Hello" > /var/www/simplesamlphp/index.html (as root)
sudo chown -R www-data:www-data /var/www/simplesamlphp
sudo chmod -R 755 /var/www
其次,我创建了/etc/apache2/sites-available/simplesamlphp.conf
:
<VirtualHost *>
ServerName simplesamlphp
DocumentRoot /var/www/simplesamlphp
SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/simplesamlphp/config
Alias /simplesaml /var/simplesamlphp/www
<Directory /var/simplesamlphp/www>
<IfModule !mod_authz_core.c>
# For Apache 2.2:
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
# For Apache 2.4:
Require all granted
</IfModule>
</Directory>
</VirtualHost>
第三,我将此行添加到/etc/hosts
:
127.0.0.1 simplesamlphp
四、我跑了:
sudo a2enmod rewrite
sudo a2ensite simplesamlphp.conf
sudo service apache2 restart
问题:访问http://simplesamlphp/simplesaml
给The requested URL /simplesaml was not found on this server
和以下出现在/var/log/apache2/error.log
:
AH00128: File does not exist: /var/www/html/simplesaml
我做错了什么?
顺便说一句,我正在遵循这些说明。实际上,我不确定为什么需要 DocumentRoot,尽管所有 Web 内容都在/var/simplesamlphp/www
.
读者须知:请阅读 Henning Kockerbeck 的评论。Apache 2.4 虚拟主机功能在官方指南中有很好的描述。以下答案已过时。
该过程为何有效的最佳解释如下(来自文档):
如果您没有禁用默认站点
000-default
,您现在有两个<VirtualHost *>
声明,并且默认一个不是基于名称的。Apache 无法区分它们,为了解决歧义,它会简单地忽略第二个。您可以通过三种不同的方式进行操作:000-default.conf
、取消注释ServerName
指令并为其分配不同的名称。