![Apache 虚拟主机目录指令在第二个虚拟主机上被忽略](https://linux22.com/image/709706/Apache%20%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E7%9B%AE%E5%BD%95%E6%8C%87%E4%BB%A4%E5%9C%A8%E7%AC%AC%E4%BA%8C%E4%B8%AA%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E4%B8%8A%E8%A2%AB%E5%BF%BD%E7%95%A5.png)
我有一个 Centos 网络服务器,上面设置了 2 个网站。最初它只有一个网站,虚拟主机配置被添加到 httpd.conf 文件的末尾。我知道这不是最佳实践,但它运行良好,如下所示。
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
#ServerAdmin [email protected]
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/example_error.log
CustomLog /var/log/httpd/example_access.log combined
#loglevel warn
<Directory />
#Options Indexes FollowSymLinks
#AllowOverride None
#Require all granted
Options Indexes FollowSymLinks MultiViews
Allowoverride All
Order allow,deny
allow from all
</Directory>
添加了第二个开发网站,它是第一个网站的副本,并在 httpd.conf 文件中第一个网站的正下方创建了虚拟主机,如下所示:
<VirtualHost *:80>
ServerName dev.example.com
ServerAlias dev.example.com
DocumentRoot /var/www/dev.example.com/html
#ErrorLog /var/log/httpd/dev.example.com/error.log
#CustomLog /var/log/httpd/dev.example.com/requests.log combined
<Directory />
#Options Indexes FollowSymLinks
#AllowOverride None
#Require all granted
Options Indexes FollowSymLinks MultiViews
Allowoverride All
Order allow,deny
allow from all
</Directory>
第二个虚拟主机配置肯定被读取,因为它显示开发网站,但目录指令似乎被忽略了。
我也尝试过明确说明第二个目录路径
<Directory /var/www/dev.example.com/html>
然而它再次被忽视了。
我在第二个站点的设置中遗漏了允许读取目录指令的某些内容吗?
答案1
Directory / 指的是服务器的根目录。尝试使用 Location / 来引用特定于虚拟主机的 URL。
答案2
感谢上述两位提供的信息。我惊讶地发现,一个网站可以运行,而另一个则无法运行,因为配置文件设置不正确。我以为这两个网站都无法运行。
- 从虚拟主机部分删除目录指令。
使目录路径明确,即
<Directory /var/www/dev.website1.com/html>
保留 allowoverride all 不变。
- 重新启动服务。
此外,虽然一个网站可以运行,但另一个网站无法运行,直到两个网站目录指令都设置了明确的路径后,它才开始运行。
答案3
你可以使用这个代码
<VirtualHost *:80>
ServerName gandom.local
ServerAlias www.gandom.local
DocumentRoot /var/www/html/gandom
<Directory /var/www/html/gandom>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>