我在设置子域名 (x.example.com) 时遇到了奇怪的困难。主站点运行正常,但无论我如何设置 VirtualHost 配置,尝试访问 x.example.com 时都会出现 404 错误。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example.com/htdocs
ServerAlias example.com
</VirtualHost>
<VirtualHost *:80>
ServerName x.example.com
ErrorLog /var/logs/x-error-log
CustomLog /var/logs/x-access-log common
DocumentRoot /var/www/x/htdocs
</VirtualHost>
据我所知,这是一个原始设置。任何建议都值得赞赏。
答案1
我猜想新的 VirtualHost 不允许访问 DocumentRoot。您需要在 Virtualhost 设置中添加类似以下内容。
<Directory "/var/www/x/htdocs">
Options Includes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
默认情况下,对文件系统的访问是被拒绝的;你的配置文件中的某处可能会有类似这样的内容:
<Directory "/">
Options FollowSymLinks
AllowOverride None
order allow,deny
deny from all
</Directory>
希望这可以帮助
答案2
尝试添加Alias x /var/www/x/htdocs
到您的主站点。这将使您能够从主站点查看 x 内容(如果可用)。
如果目录或文件无法读取,则经常会出现 404。请检查文件系统上的目录权限。目录需要权限,如 755 或 750,具体取决于组。文件需要权限,如 644 或 640,具体取决于组。通常,Web 服务器的 ID(opten apache 或 www-data)不应拥有内容。通常将内容上的组设置为 Web 服务器的组。
检查目录权限配置。如果是 /var/www,则两个站点均已覆盖。如果是 /var/www/htdocs,则为 /var/www/x/htdocs 设置副本,或将其更改为 /var/www。
考虑在 /var/www/x/htdocs 上设置组粘性位,并对其执行递归 chgrp。
答案3
只是为了检查:
在您的 DNS 配置中创建一个 A 记录,以便您的子域解析为您的 IP 地址。