我有一个安装了 LAMP 的 Amazon ec2 实例。我编辑了 /etc/apache2/sites-available/000-deault.conf 并添加了以下内容:
<VirtualHost *:80>
ServerAlias *
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog /var/log/apache2/access.log vcommon
VirtualDocumentRoot /var/www/vhosts/%0
</VirtualHost>
Listen 443
<VirtualHost *:443>
ServerAlias *
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog /var/log/apache2/access.log vcommon
VirtualDocumentRoot /var/www/vhosts/%0
</VirtualHost>
当我访问我的域名时,它们指向正确的目录,并且除了一件事之外,一切都运行良好......当我访问带有 www 的域名时,它会出现此错误:
“未找到
该服务器上未找到所请求的 URL /。”
我的目录结构是 /var/www/vhosts/domain.com,但没有 www。- 这可能是问题所在,如果是,我该怎么做才能在不添加 domain.com 和 www.domain.com 目录的情况下解决这个问题?
答案1
你可以使用这个VirtualDocumentRoot
来代替:
VirtualDocumentRoot "/var/www/vhosts/%-2.0.%-1.0"
这将使所有子域(包括www.example.com
)也指向/var/www/vhosts/example.com
。
顺便说一句,如果这是您唯一/第一个虚拟主机(在每个端口上),那么您根本不需要ServerAlias *
;如果没有找到其他匹配的虚拟主机,则无论如何都会使用默认虚拟主机。
答案2
您的配置有
UseCanonicalName Off
CannonicalName 是一种 DNS 条目。
servername.com 是 DNS 类型 A
www.servername.com 是 DNS 类型 CNAME,重定向到 DNS 类型 a servername.com
默认情况下,UseCanonicalName 是禁用的,从配置文件中删除行并使用以下命令重新加载/重新启动 apache 服务
systemctl restart apache2
建议您配置 ServerName 和 ServerAlias,以便仅当 DNS 匹配时才返回 200 代码和网页。
服务器名称 servername.com
服务器别名 www.servername.com ww2.servername.com
此配置文件中不需要 Listen 443 行,请将其放置在 /etc/apache2/apache2.conf 中