我有以下 .htaccess 文件:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.de [NC]
RewriteRule ^(.*)$ http://www.example.de/$1 [L,R=301]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
AuthType Basic
AuthName "Access to /www.example.de"
AuthUserFile /myfolder/homepages/10/d563344564/htpasswd
Require user admin
如果我访问 example.de,系统会询问我两次密码(我猜第一次是针对 example.de,第二次是针对 www.example.de)。但是,在加载某些图像时也会发生这种情况(src 属性包含带有 www 的链接,但可能由于 .htaccess 而已更改)。我该采用哪种方式才能在开始时只要求输入一次密码?
答案1
问题在于,基本身份验证特定于 protocol://host:port 和 realm 组合,并且每次变化都需要重复登录。如果您的请求混合在一起http://example.com
(http://www.example.com
甚至可能httpS://www.example.com
),您的用户将始终需要分别登录每个请求。
解决方案是停止使用基本身份验证,使用登录表单并设置对您的域和任何/所有子域有效的会话 cookie。这相当复杂,但仍受原生 Apache 模块支持:mod_auth_form
回复您的以下评论:
.htaccess
文件适用于它们所在的目录(以及该目录下的任何子目录),无论您如何到达该目录。
如果你希望某些指令适用于 VirtualHost example.com
,而其他指令则www.example.com
应该忘记令人憎恶的这些.htaccess
文件是并且执行您应该已经执行的操作,在<VirtualHost>
主条目中设置您的指令httpd.conf
(或例如sites-available/site.conf
包含):
<VirtualHost *:80>
ServerName example.de
Redirect "/" "http://www.example.de/"
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.de
DocumentRoot /var/www/html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
AuthType Basic
AuthName "Access to /www.example.de"
AuthUserFile /myfolder/homepages/10/d563344564/htpasswd
Require user admin
....
</VirtualHost>