public_html
我在我的目录中设置了个人身份验证home
,但没有效果。即,我应该弹出一个窗口,询问我的凭据,但这并没有发生。身份验证在服务器根目录中的目录中运行良好,并且工作正常。现在我正在重组服务器。
以下是更多详细信息。有一些与配置文件相关的附带问题和疑问,我将其放在粗体。
- 我有主 HTTP 目录,
/var/www/html
HTTPS 也有相同的目录。 - 那里只有一个文件,其中
index.html
有一个指向我个人~tomas
URL 的链接。效果很好。我正在使用userdir
mod 进行映射~tomas
。 - 我还有一个个人
cgi-bin
目录,CGI 工作正常,但我想要 URL~tomas/cgi-bin
显示目录列表,由于某种原因不起作用,我收到 403 Forbidden。 - 我希望主目录可以在 HTTPS 和 HTTP 中使用并且无需授权。但是一旦客户端通过以下方式请求个人
public_html
目录之一~user
,就应该对访问进行身份验证,并且身份验证应通过 HTTPS 进行。所以HTTP需要切换到HTTPS。我已经设置并测试了 HTTPS 设施,但尚未在此上下文中设置任何强制措施。如果重要的话,我没有 FQDN。
然而,主要问题是,如何让身份验证本身起作用~user
,即使是通过 HTTP。
我把所有的配置都放进去了userdir.conf
了猜测问题是在 中使用通配符/home/*/public_html
。
这是userdir.conf
.
<IfModule mod_userdir.c>
UserDir "public_html"
UserDir disabled
UserDir enabled tomas
<Directory "/home/*/public_html">
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
AuthType Basic
AuthName "Personal HTML"
AuthUserFile "/usr/share/apache2/passwd/passwords"
Require valid-user
SSLOptions +StdEnvVars
</Directory>
<Directory "/home/*/public_html/cgi-bin">
Options ExecCGI Indexes
SetHandler cgi-script
</Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
如果您对此配置文件或我对 Apache 的总体方法有任何意见,请发表评论。
答案1
关键是Limit
指令。线索存在于<Limit>
指令部分mod Apache 文档页面的core
。
<Limit>
当将or<LimitExcept>
指令与指令一起使用时,请注意,无论是否存在其他指令Require
,第一个成功的都会授权请求。Require
Require
事实证明,第一个Require
与当前案例匹配的决定了它的处理方式。根据我的问题的配置,那就是:
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
AuthType Basic
AuthName "Personal HTML"
AuthUserFile "/usr/share/apache2/passwd/passwords"
Require valid-user
通过一个简单的 GET 请求,Require all granted
上面列表的第二行中的 GET 请求就完成了这项工作。它AuthType Basic
下面的行和其他行都是死代码。正确的做法是:
<Limit GET POST OPTIONS>
AuthType Basic
AuthName "Personal HTML"
AuthUserFile "/usr/share/apache2/passwd/passwords"
Require valid-user
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
顺便说一句,这是该指令被忽略的情况Limit
。
Require all granted
<Limit GET POST OPTIONS>
AuthType Basic
AuthName "Personal HTML"
AuthUserFile "/usr/share/apache2/passwd/passwords"
Require valid-user
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
第一行成功并授权请求。