Alias 指令可能永远不会匹配,因为它与之前的 Alias 重叠

Alias 指令可能永远不会匹配,因为它与之前的 Alias 重叠

好的,不确定为什么会发生这种情况。

因此,我收到了消息

The Alias directive in /etc/httpd/conf.d/awstats.conf at line 3 will probably never match because it overlaps an earlier Alias.

The Alias directive in /etc/httpd/conf.d/welcome.conf at line 18 will probably never match because it overlaps an earlier Alias.

/httpd/httpd.conf但这是我的文件的前 15 行

ServerSignature Off
ServerTokens Prod
ServerRoot "/etc/httpd"

Listen *:80
Listen *:443

User apache
Group apache

ServerAdmin hostmaster@localhost
ServerName 192.168.1.200:80

Include conf.d/*.conf  <- THIS IS WHERE INCLUDES BEGIN
Include conf.modules.d/*.conf

第 14 行之前绝对没有任何Alias or ScriptAlias条目,即Include conf.d/*.conf

因此,实际上,第一次Alias遇到的条目实际上是在awstats.conf下的文件中/conf.d/*.conf

那么为什么我会收到这个错误呢?

服务器运行,只是有点烦人。

编辑:执行了 grep Alias on/etc/httpd/conf.d/*.conf并且结果如下 ->

/etc/httpd/conf.d/awstats.conf:Alias /awstatsclasses "/usr/share/awstats/wwwroot/classes/"
/etc/httpd/conf.d/awstats.conf:Alias /awstatscss "/usr/share/awstats/wwwroot/css/"
/etc/httpd/conf.d/awstats.conf:Alias /awstatsicons "/usr/share/awstats/wwwroot/icon/"
/etc/httpd/conf.d/awstats.conf:ScriptAlias /awstats/ "/usr/share/awstats/wwwroot/cgi-bin/"
/etc/httpd/conf.d/welcome.conf:Alias /.noindex.html /usr/share/httpd/noindex/index.html
/etc/httpd/conf.d/welcome.conf:Alias /noindex/css/bootstrap.min.css /usr/share/httpd/noindex/css/bootstrap.min.css
/etc/httpd/conf.d/welcome.conf:Alias /noindex/css/open-sans.css /usr/share/httpd/noindex/css/open-sans.css
/etc/httpd/conf.d/welcome.conf:Alias /images/apache_pb.gif /usr/share/httpd/noindex/images/apache_pb.gif
/etc/httpd/conf.d/welcome.conf:Alias /images/poweredby.png /usr/share/httpd/noindex/images/poweredby.png

答案1

最容易理解的是,Apache 通过逐行解析主 httpd.conf 在内部生成单个配置文件,并在Include或者IncludeOptional指令被使用,然后继续下一行。

当在文件系统路径中使用通配符时,Include包含内容将按字典顺序进行解析,conf.d/alice.conf 并将出现在之前conf.d/bob.conf

对于许多指令来说,顺序很重要,对于某些指令,会使用最后出现的指令,对于其他指令,会先使用范围较大的指令,然后使用范围较小的指令,等等。

规则别名指令包括:

在不同上下文中发生的别名和重定向将像其他指令一样按照标准合并规则。但是,当多个别名或重定向出现在相同上下文中(例如,在相同部分中)时,它们将按照特定顺序进行处理。

第一的,所有重定向都在别名之前处理Redirect被处理,因此与或匹配的请求RedirectMatch永远不会应用别名。其次,别名和重定向按照它们在配置文件中出现的顺序进行处理, 第一个匹配项优先

因此,当两个或多个指令应用于同一子路径时,必须首先列出最具体的路径,以便所有指令都能生效。例如,以下配置将按预期工作:

Alias /foo/bar /baz 
Alias /foo /gaq 

但是如果将上述两个指令的顺序颠倒过来,Alias/foo总是会在 /foo/barAlias 之前匹配,因此后一个指令将被忽略。

对于您的情况进行故障排除的良好开端是简单的grep -E "Alias|Redirect" conf.d/*.conf

答案2

由于主机配置不正确,我遇到了类似的错误。要解决此问题,只需添加:

<VirtualHost *:80>
Here Host Configuration
</VirtualHost>

检查配置虚拟主机。在我的情况下,错误导致虚拟主机配置错误。它看起来像这样:/etc/apache2/sites-available/hitman.conf

ServerAdmin marek@localhost
ServerName hitman
DocumentRoot /home/marek/public_html/hitman

正确的配置:

<VirtualHost *:80>
ServerAdmin marek@localhost
ServerName hitman
DocumentRoot /home/marek/public_html/hitman
</VirtualHost>

相关内容