我需要在 Apache 中拥有多个本地站点。因此我为每个站点添加一个虚拟主机:
#/etc/apache2/sites-available/example.com:
<VirtualHost 127.0.0.1:80>
ServerAdmin [email protected]
ServerName www.example.com
ServerAlias example.com
# Indexes + Directory Root.
DirectoryIndex index.php
DocumentRoot /var/www/example.com/htdocs/
# CGI Directory
ScriptAlias /cgi-bin/ /var/www/example.com/cgi-bin/
<Location /cgi-bin>
Options +ExecCGI
</Location>
# Logfiles
ErrorLog /var/www/example.com/logs/error.log
CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>
然后我执行sudo a2ensite example.com
和sudo service apache2 restart
。问题是根相对路径不起作用。例如,当我说<link href="/css/somefile.css" rel="stylesheet">
中的某个地方时/var/www/example.com/htdocs/index.php
,apache 无法/var/www/example.com/htdocs/css/somefile.css
为浏览器提供服务(浏览:localhost/example.com/htdocs
)
我遗漏了什么?
答案1
我认为问题在于您使用 localhost/example.com/htdocs 访问该网站
您可以执行以下操作:
在您的 vhost 配置中切换 ServerName 和 ServerAlias:
ServerName example.com
ServerAlias www.example.com
使用以下命令重新启动 apache2:
sudo /etc/init.d/apache2 restart
现在在 /etc/hosts 中添加两行:
127.0.0.1 example.com
127.0.0.1 www.example.com
您现在应该能够通过 www.example.com 或 example.com 访问该网站。(如果您在安装了 Apache 的同一台计算机上工作,则此方法有效)
你的路径应该可以按预期工作。
如果您有任何问题,请发表评论。
答案2
啊!我想我明白你的问题了...
链接标签可以使用完整路径,但完整路径从文档根目录开始:
<link href="/css/somefile.css" .../>
磁盘上的完整路径(/var/www/example.com/htdocs/css/somefile.css
)确实不起作用。
Apache 所做的是这样的:
DocumentRoot /var/www/example.com/htdocs/
+
<link href="/css/somefile.css" .../>
=
/var/www/example.com/htdocs/css/somefile.css
就网站而言,DocumentRoot 是某种虚拟根 (/) 目录。这可以防止访问者访问他们永远无权访问的文件(例如/etc/passwd
:)