我们的网站最近已镜像,因此,我正在尝试:
- 排除名为 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>