Apache 使授权优先于身份验证

Apache 使授权优先于身份验证

我们的网站最近已镜像,因此,我正在尝试:

  • 排除名为 badmirror.com 的实时镜像
  • 为我的网站 mysite.com 设置一个基本身份验证

我首先设法在我的虚拟主机中使用以下表达式驱逐 badmirror.com:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        SSLEngine on
        SSLProxyEngine on
        ServerName www.mysite.com
        ServerAlias mysite.com *.mysite.com

        ServerAdmin [email protected]
        DocumentRoot /myphp/mysite/www
        <Directory "/myphp/mysite/www">
        Options FollowSymlinks MultiViews
        AllowOverride All
        Require expr "%{HTTP_HOST} =~ /(.*)mysite\.com/"
        </Directory>

        ErrorLog /var/log/apache2/ling/all.log

        SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf


    </VirtualHost>
</IfModule>

因此基本上这一行就可以解决问题:

Require expr "%{HTTP_HOST} =~ /(.*)mysite\.com/"

有了这个,它就可以正常工作:我访问 badmirror.com,它有一个禁止页面,然后我访问 mysite.com,它显示了该网站。

现在,我在我的网站上添加了一个基本身份验证,使用我的应用程序中的 .htaccess 文件:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>


#Header set Access-Control-Allow-Origin *


AuthType Basic
AuthName "Password Required"
AuthUserFile /leeapp/www/.htpasswd
Require valid-user

问题是:现在我访问 badmirror.com,它要求我进行身份验证,我进行了身份验证,现在我看到了 mysite.com 的内容。

所以基本上,这就像是一个有效用户绕过了我的其他规则

Require expr "%{HTTP_HOST} =~ /(.*)mysite\.com/"

我怎样才能使 HTTP_HOST 表达式规则更加牢固?或者至少让身份验证不会覆盖规则?

谢谢。

答案1

在非常全面的 apache 文档上找到它:https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html

所以在我的例子中,我只需要将 Require 指令组合到 RequireAll 指令中,这对我来说就足够了:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        SSLEngine on
        SSLProxyEngine on
        ServerName www.mysite.com
        ServerAlias mysite.com *.mysite.com

        ServerAdmin [email protected]
        DocumentRoot /myphp/mysite/www
        <Directory "/myphp/mysite/www">
            <RequireAll>
                Options FollowSymlinks MultiViews
                AllowOverride All
                Require expr "%{HTTP_HOST} =~ /(.*)mysite\.com/"
                AuthType Basic
                AuthName "Password Required"
                AuthUserFile /leeapp/www/.htpasswd
                Require valid-user
            </RequireAll>
        </Directory>

        ErrorLog /var/log/apache2/ling/all.log

        SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf


    </VirtualHost>
</IfModule>

相关内容