我对服务器配置并不陌生,但在我的本地开发系统(所有系统)上,某些更新似乎破坏了网站的别名,现在都不起作用了。我不确定什么时候发生的,因为我最近没有做太多的开发工作,但当我尝试时,我发现它坏了,所以我希望有人能帮助我让它再次运行。
这个特定的系统正在运行 Kubuntu,但它在我的两个 Ubuntu Studio 系统上也出现故障,它们都运行 22.10 和 Apache 2.4.54。
conf 文件有这个,在这种情况下它是由 Webmin 创建的,但与我手动创建的现有站点非常相似,我也在 alias.conf 文件中尝试过它,但没有什么区别:
<VirtualHost localhost:80>
DocumentRoot /var/www/html/domain.loc
ServerName domain.loc
<Directory "/var/www/html/domain.loc">
Options None
Require all granted
</Directory>
Alias /common /var/www/html/domain.loc/common
</VirtualHost>
我还尝试对 Alias 和引用的路径进行稍微的重新排列:
<VirtualHost localhost:80>
DocumentRoot "/var/www/html/domain.loc"
ServerName domain.loc
Alias "/common" "/var/www/html/domain.loc/common"
<Directory "/var/www/html/domain.loc">
Options None
Require all granted
</Directory>
</VirtualHost>
...我尝试使用位置标签:
<VirtualHost localhost:80>
DocumentRoot "/var/www/html/domain.loc"
ServerName domain.loc
<Location "/common">
Alias "/var/www/html/domain.loc/common"
</Location>
<Directory "/var/www/html/domain.loc">
Options None
Require all granted
</Directory>
</VirtualHost>
作为测试,我编写了一个 PHP 脚本,这是我在实时服务器上用于创建别名的脚本,它显示别名已经存在,因此 Apache 可以识别它。当它正常工作时,如果我访问包含别名的 URL,它会像加载本地文件一样加载:
http://domain.loc/common/index.php
现在它出现 404 页面未找到并且 Apache 错误日志未显示任何内容。
<?php
$target = "/var/www/html/common";
$link = "/var/www/html/domain.loc/common";
$error = symlink($target, $link);
if ($error === TRUE) :
echo readlink($link) . " has been linked";
else :
echo "<p>The link already exists between $link and $target";
endif;
?>
/common
当然,与/domain.loc
上面的测试脚本中所示的处于同一级别,并mod_alias
安装有a2query -m alias
返回alias (enabled by maintainer script)
有任何想法吗?
答案1
这Alias
指示 提供映射不同的文档树中主机文件系统的部分。
下列:
ServerName domain.loc
DocumentRoot /var/www/html/domain.loc
已经足以确保请求应该显示来自文件系统上的http://domain.loc/common
位置的内容。/var/www/html/domain.loc/common
您不需要任何 for 变体Alias
来/common
实现这一点。
Alias /common /var/www/html/domain.loc/common
是完全多余的。