我有一个已配置的 Django 网站mod_wsgi
,使用 Apache 2.4 作为 Web 服务器。
虚拟主机:
<VirtualHost *:80>
ServerName site.com
ServerAlias site.com
ServerAdmin [email protected]
DocumentRoot /var/www/site
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
Alias /media/ /var/www/site/media
Alias /static/ /var/www/site/static
<Directory /var/www/site>
Require all granted
AllowOverride All
</Directory>
WSGIScriptAlias / /var/www/site/nep/wsgi.py
ErrorLog /var/log/apache2/site/error.log
CustomLog /var/log/apache2/site/access.log combined
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
</VirtualHost>
我有文件.htaccess
和.htpasswd
。/var/www/site
.htaccess内容:
AuthType Basic
AuthName "Portal Dev Environment, restricted content"
AuthUserFile /var/www/site/.htpasswd
Require valid-user
我已经搜索了该问题的所有可能的解决方案,但没有找到。
虚拟主机中是否存在配置错误,导致.htaccess
其无法.htpasswd
工作?
答案1
我遇到了同样的问题,并提出了这个问题。对我来说,解决方案是,Require all granted
我的网站由 Django 提供支持的部分的某些指令覆盖了Require valid-user
网站根目录的指令。类似:
<VirtualHost *:443>
[...]
# Other directives here
ErrorLog ${APACHE_LOG_DIR}/error.log
<Directory "/var/www/html">
AuthType Basic
AuthName "Please enter password"
AuthUserFile /path/2/passwd/file
Require valid-user
</Directory>
#for django
Alias /app/static /var/www/html/app/static
<Directory /var/www/html/app/static>
Require all granted
</Directory>
<Directory /var/www/html/site>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
[...]
</VirtualHost>
我最初使用这些Require all granted
指令来确保 Apache 可以访问 WSGI 服务器和静态文件,以便为 Django 网站提供服务。事实证明,如果您将这两个指令分别更改为Require valid-user
,它就可以正常工作,然后会弹出身份验证对话框,就像在我网站上所有其他非 Django 支持的页面上一样。果然,CacoRequire all granted
在其 vHost 配置中有一个指令,如上所示。
我没有使用 .htaccess 文件,我的访问控制配置仅在 vHost 配置文件中,但这不应该产生区别。