Apache-2.2
.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 已經更改)。我可以按照哪種方式在一開始只有一個密碼請求?
問題是基本身份驗證特定於協議://主機:埠和領域組合,並且需要為每個變體重複登錄。如果您的請求混合在一起
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>