.htaccess:重定向功能需要输入两次密码

.htaccess:重定向功能需要输入两次密码

我有以下 .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.comhttp://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>

相关内容