Apache .htpasswd 未應用於子目錄
我有幾個 WordPress 臨時站點放置在臨時目錄中。暫存目錄包含 .htaccess 和 .htpasswd
.ht 訪問:
AuthType Basic AuthName "restricted area" AuthUserFile /var/www/staging/.htpasswd require valid-user
.htpasswd
username:PdadsaasdMehzdsadwad
當我在此目錄中放置文件時,身份驗證過程會適當地觸發,但是當我將 WordPress 站點放在子目錄中時,身份驗證不會顯示。
範例 WP 站點:/var/www/staging/some-wp-site
.htaccess
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
WP網站虛擬主機:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName somewpsite.com ServerAlias somewpsite.com DocumentRoot /var/www/staging/some-wp-site <Directory /> AllowOverride All </Directory> <Directory /var/www/staging/some-wp-site> Options Indexes FollowSymLinks MultiViews AllowOverride all Require all granted </Directory> </VirtualHost>
我的 apache.conf
<Directory /var/www/staging> Options Indexes FollowSymLinks MultiViews AllowOverride All </Directory>
我懷疑我需要修改虛擬主機以使用身份驗證,但是由於我在該目錄中有很多站點,如果有一個 globl rul 可以簡單地觸發放置在此子目錄中的任何文件,我更願意,無論其他配置說什麼. 這可能嗎?
問題確實是您正在使用
.htaccess
文件,即使您可以訪問主要的 Apache 配置文件。通常,當您無權訪問主伺服器配置文件時,您應該只使用 .htaccess 文件。例如,有一個常見的誤解,即使用者身份驗證應始終在 .htaccess 文件中進行,而近年來,另一個誤解是 mod_rewrite 指令必須在 .htaccess 文件中進行。這根本不是那麼回事。https://httpd.apache.org/docs/2.4/howto/htaccess.html
.htaccess
在這種情況下,會發生未應用文件的意外行為,/var/www/staging
因為據我所知,Apache 只會搜尋和應用.htaccess
在 DocumentRoot 目錄及以下目錄中找到的任何文件。即僅/var/www/staging/some-wp-site
及其子目錄。我相當肯定,如果您在主 httpd.conf 中創建一個目錄塊以要求對其進行身份驗證,
/var/www/staging
那麼它也將適用於所有子目錄和每個帶有 a 的虛擬主機DocumentRoot
。