从 Apache 2.2 更新到 2.4 后,别名不再起作用

从 Apache 2.2 更新到 2.4 后,别名不再起作用

我对服务器配置并不陌生,但在我的本地开发系统(所有系统)上,某些更新似乎破坏了网站的别名,现在都不起作用了。我不确定什么时候发生的,因为我最近没有做太多的开发工作,但当我尝试时,我发现它坏了,所以我希望有人能帮助我让它再次运行。

这个特定的系统正在运行 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 是完全多余的。

相关内容