VirtualHost 中的别名不起作用并出现 404 错误

Alias inside VirtualHost is not working and gives 404 error

我有一个使用 VirtualHost 维护多个域的服务器,我正在尝试设置 GitWeb according to Gitweb - ArchWiki

根据 wiki,我必须将以下行附加到 Apache 配置文件中。

Alias /gitweb "/usr/share/gitweb"
<Directory "/usr/share/gitweb">
    DirectoryIndex gitweb.cgi
    Options ExecCGI
    Require all granted
    <Files gitweb.cgi>
    SetHandler cgi-script
    </Files>
    SetEnv  GITWEB_CONFIG  /etc/gitweb.conf
</Directory>

在此之后,Alias 工作,我可以通过访问

之一来访问该服务

到目前为止,一切正常。

现在我想将 Alias 的效果限制在一个域中:my_domain_1.com。所以我将上面的行移动到其现有的 VirtualHost 设置中。

<VirtualHost *:80>
    DocumentRoot "/var/www/html1"
    ServerName my_domain_1.com

    # The lines are pasted here.

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =my_domain_1.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} END,NE,R=permanent]
</VirtualHost>

但是,当我访问https://my_domain_1.com/gitweb/时,出现404错误。错误日志什么也没说,我没有域的 .htaccess

我怎样才能让它发挥作用?

我找到了解决方案。

因为我要求所有 http 请求都应该重定向到 https 版本,所以我应该写 gitweb 设置而不是 <VirtualHost *:80> (http)但在 <VirtualHost *:443> (https) 中。结果应该是

<VirtualHost *:443>
    DocumentRoot "/var/www/html1"
    ServerName my_domain_1.com

    # The lines are pasted here.

    SSLCertificateFile /etc/letsencrypt/live/my_domain_1.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/my_domain_1.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

现在完美运行了。