我有多个域名,并且我设想每个域名都应该有一个 VirtualHost。glpi.localnet.lan 从未加载,而 web.localnet.lan 始终显示,即使我在 Web 浏览器中输入“glpi.localnet.lan”。
站点启用中的 glpi.localnet.lan.conf:
<VirtualHost *:80>
ServerName glpi.localnet.lan
ServerAdmin [email protected]
ServerAlias glpi
Alias /glpi/ /var/www/glpi/
RedirectMatch ^/$ /glpi/
DocumentRoot /var/www/glpi
<Directory />
Options None
AllowOverride None
</Directory>
<Directory /var/www/glpi>
Options None
AllowOverride None
</Directory>
<Directory /var/www/glpi/files>
Options None
AllowOverride None
Order allow,deny
deny from all
</Directory>
LogLevel debug
CustomLog ${APACHE_LOG_DIR}/glpi-access.log combined
ErrorLog ${APACHE_LOG_DIR}/glpi-error.log
</VirtualHost>
这也是在 sites-enabled 下的 web.localnet.lan.conf:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName web.localnet.lan
ServerAlias web
DocumentRoot /var/www/html
<Directory />
Options None
AllowOverride None
</Directory>
<Directory /var/www/html>
Options None
AllowOverride None
</Directory>
LogLevel debug
CustomLog ${APACHE_LOG_DIR}/web-access.log combined
ErrorLog ${APACHE_LOG_DIR}/web-error.log
</VirtualHost>
我怎样才能完成以下事情:
- 当我输入 glpi.localnet.lan 时,配置文件
glpi.localnet.lan.conf
被加载, - 当我进入web.localnet.lan时,配置文件
web.localnet.lan.conf
被加载。
单独来看,每个配置文件都运行良好。将两者结合起来,只会考虑一个,而配置文件日志文件中找到的请求也会被考虑(即使不是预期的请求)。(似乎取决于我先用a2ensite
命令添加哪一个?!)。
非常感谢您的帮助,请随时询问我可能忘记提供的更多详细信息。
答案1
我可能错了,但是如果你删除RedirectMatch
glpi vhost 中的行,它会起作用吗?在我看来这不对。
来自Apache 文档:
重定向匹配:
与 Alias 和 AliasMatch 之间的差异相关的考虑也适用于 Redirect 和 RedirectMatch 之间的差异。
别名匹配:
Alias 和 AliasMatch 之间的一个细微差别是 Alias 会自动将 URI 的任何其他部分(匹配部分以外的部分)复制到右侧文件路径的末尾,而 AliasMatch 则不会。这意味着在几乎所有情况下,您都希望正则表达式从头到尾匹配整个请求 URI,并在右侧使用替换。
换句话说,仅仅将 Alias 改为 AliasMatch 不会产生相同的效果。至少,您需要在正则表达式的开头添加 ^,在结尾添加 (.*)$,并在替换的结尾添加 $1。
该行可能会以您意想不到的方式重定向请求。
如果 Apache 无法将请求与虚拟主机匹配,它将使用列出的第一个虚拟主机。根据您的 Apache 版本和平台,可能配置了一个默认虚拟主机,用作/var/www/html
文档根目录。
由于您的web
vhost 使用相同的文档根目录,因此这可能就是您最终看到的内容。