Apache-2.4

Apache .htpasswd 未應用於子目錄

  • April 23, 2018

我有幾個 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

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