Apache-2.2

.htaccess:重定向功能需要兩次密碼

  • June 29, 2016

我有以下 .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 已經更改)。我可以按照哪種方式在一開始只有一個密碼請求?

問題是基本身份驗證特定於協議://主機:埠和領域組合,並且需要為每個變體重複登錄。如果您的請求混合在一起http://example.com並且http://www.example.com(甚至可能httpS://www.example.com)您的使用者將始終需要分別登錄每個請求。

解決方案是停止使用基本身份驗證並使用登錄表單並設置對您的域和任何/所有子域有效的會話 cookie。這涉及更多,但仍由本機 apache 模組支持:mod_auth_form


針對您的以下評論:

.htaccess文件適用於它們所在的目錄(以及在該目錄下找到的任何子目錄),無論您如何到達該目錄。

如果您希望某些指令適用於 VirtualHostexample.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>

引用自:https://serverfault.com/questions/786643