如何修复错误:向apache2添加子域时,Site domain.com不存在?

如何修复错误:向apache2添加子域时,Site domain.com不存在?,apache2,subdomain,Apache2,Subdomain,我正在尝试将子域添加到我的家庭服务器 svn.domain.com trac.domain.com 由于动态IP,我使用dyndns服务,除此之外,我还将domain.com托管在其他地方。我为远程主机上的子域创建了CNAME,以指向我的user.dyndns.org域 所以现在当我访问任何一个子域:trac或svn时,我会看到“Itworks!”消息 完成后,我在/etc/apache2/sites enabled下创建了两个虚拟主机文件 文件1:svn.domain.com和文件2:trac

我正在尝试将子域添加到我的家庭服务器

svn.domain.com trac.domain.com

由于动态IP,我使用dyndns服务,除此之外,我还将domain.com托管在其他地方。我为远程主机上的子域创建了CNAME,以指向我的user.dyndns.org域

所以现在当我访问任何一个子域:trac或svn时,我会看到“Itworks!”消息

完成后,我在/etc/apache2/sites enabled下创建了两个虚拟主机文件

文件1:svn.domain.com和文件2:trac.domain.com

内容:

<VirtualHost *:80>

  ServerName trac.domain.com

   DocumentRoot = /var/www/trac/repos

   <Directory /var/www/trac/repos>
    Order allow,deny
    allow from all
   </Directory>

</VirtualHost>

ServerName trac.domain.com
DocumentRoot=/var/www/trac/repos
命令允许,拒绝
通融


ServerName svn.domain.com
DocumentRoot=/var/svn/repos
命令允许,拒绝
通融
但我得到错误:错误:站点trac.domain.com不存在


我做错了什么?

尝试将文件移动到可用的/站点。然后运行
a2ensite svn.domain.com
a2ensite trac.domain.com
并重新加载Apache。

从Apache 2.2升级到Apache 2.4时,我遇到了这个问题。(荒谬的)解决方案是确保所有文件都以
.conf
结尾,或者
a2ensite
错误:站点示例不存在


此外,当在启用的
站点中手动链接时,如果没有
.conf
扩展,它们甚至无法加载。

当我从Apache 2.2升级到2.4时,我也遇到了同样的问题;我所有的虚拟主机突然坏了,当我试图寻找原因时,我偶然发现了这个问题

原来原因是因为我的旧的
apache2.conf
和新的
apache2.conf
之间存在差异。我的旧Apache2.2 conf文件有一行

Include sites-enabled/
IncludeOptional sites-enabled/*.conf
而我的新Apache2.4conf文件有一行

Include sites-enabled/
IncludeOptional sites-enabled/*.conf
瞧,当我把线路改成

IncludeOptional sites-enabled/

一切都恢复了正常

a2ensite只接受.conf文件,因此复制可用站点中的所有站点,使其具有.conf扩展名(重命名无效,链接名称混淆),从可用站点和已启用站点中删除原始文件。在新文件上使用a2ensite(您不需要添加.conf),这一切都可以正常工作,在/etc/apache2/apach2.conf中不使用*.conf


即使重命名原始文件,也必须有一些“内存”-符号链接也会重命名,但删除并启用“新建”。con文件可以工作,如果键入a2ensite,则可以像以前一样使用a2ensite和a2ensite。它将提示。要启用哪些站点(即,在将.conf文件放入可用站点并从启用的站点链接它之后)

a2ensite需要conf文件的全名,扩展名为.conf

a2dissite <site-configuration-file-name>
a2异议
2) 仔细查看您的配置文件:从以下最小属性开始:

<VirtualHost [Domain]:80>
ServerAdmin webmaster@localhost
ServerName [Domain]
DocumentRoot [webAppPath]

<Directory [webAppPath]>
    AllowOverride All
     Order allow,deny
     Allow from all
     Require all granted
</Directory>


ErrorLog ${APACHE_LOG_DIR}/my_domain_name_error.log

CustomLog ${APACHE_LOG_DIR}/my_domain_name_access.log combined
</VirtualHost>

服务器管理员webmaster@localhost
服务器名[域]
DocumentRoot[webAppPath]
允许超越所有
命令允许,拒绝
通融
要求所有授权
ErrorLog${APACHE\u LOG\u DIR}/my\u domain\u name\u error.LOG
CustomLog${APACHE\u LOG\u DIR}/my\u domain\u name\u access.LOG组合

我的本地服务器名称解决方案正在替换:

sudo a2ensite serverName


您需要serverfault或类似的东西-stackoverflow由软件开发人员而不是sysadmin读取。语法错误位于/etc/apache2/sites enabled/trac.domain.com的第5行:DocumentRoot接受一个参数,文档树操作“configtest”的根目录失败。请尝试从DocumentRoot指令中删除
=
DocumentRoot/var/www/trac/repos
使我感到意外的是,我对子域名进行了加密,这是错误的。您需要在该文件上运行a2ensite。正如@Joseph所提到的,您必须在conf文件上运行a2ensite,因此该文件的命名才是最重要的。否则,只需在不指定名称的情况下运行一个Ensite,您可以从列表中进行选择。非常感谢您的解释!这是非常有用的信息。现在我们只需要弄清楚如何让一个加密重新工作。我发誓我试过重命名为.conf,但它没有工作……我再试了一次,它确实工作了。a2ensite是一个perl脚本,已更新为仅允许*.conf文件。。。所以,是的,从现在开始建立虚拟主机的“正确”方法是将所有站点命名为*.conf。谢谢奥巴马!多亏了这一点,我添加了一个新行“IncludeOptionalSitesEnabled/”,然后你就可以开始工作了。我正在使用LMDE,但我认为这可能是上游的一个问题。所以每个debian发行版可能都有这个更新。嗯,为什么我们现在需要在这些vhost文件的末尾添加.conf?如果你问我真的很傻。还是非常感谢你的回答!我把头发拔了出来。那只是因为一些程序员认为这个世界上的头发太多了!因为我也这么做了但说真的,我也不明白负责的程序员怎么会认为不记录破坏性的更改是完全好的。我也一样。谢谢。请确保如果您的域如
somename.dev
,那么您的
.conf
文件也应该是
somename.dev.conf
,因为我以前遇到过这个问题,所以我有.conf扩展名。但是,当您使用tab获得默认名称时,例如键入“a2ensite t…”。按tab键并自动填充名称,它会保留.CONF扩展名。您必须键入.conf。