WordPress 安装中的 Apache 身份验证

WordPress 安装中的 Apache 身份验证

我目前在尝试对运行 WordPress 的目录中的目录进行密码保护时遇到了问题。这是一个名为“admin”的目录,用于处理 WP 之外的一些事情。

在我的 WordPress .htaccess 文件中,我设置了一条规则来忽略该目录。

RewriteEngine On
RewriteBase /
RewriteRule ^(admin|index\.php)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

当我转到我的管理目录时,它运行正常并且我能够看到我应该看到的内容(基本 PHP 内容)。

但是,当我尝试通过在其中放置 .htaccess 和 .htpassword 文件来对该目录进行密码保护时,我收到 WordPress 404 错误。它看起来像这样:

AuthUserFile /home/myuser/public_html/admin/.htpasswd
AuthName "Password Protected Area"
AuthType Basic

<limit GET POST>
require valid-user
</limit>

它(显然)与“需要有效用户”行有关。这个特定的 .htaccess/.htpasswd 文件在类似的服务器设置上运行良好。

有什么想法吗?

答案1

请尝试关闭浏览器,然后尝试连接。您可能缓存了正在使用的凭据。

如果您有多个具有不同密码的安全目录,请对Authname.

编辑:尝试将 Require 移到 Limit 语句之外。我总是将 Auth 定义与 Require 语句分组在同一个块中。

您的错误似乎表明请求的资源不存在或不可读。请尝试删除对 的重写修改admin。标准重写规则适用于混入 Wordpress 安装中的目录和文件。

您可能希望使用 LimitExcept 块而不是 Limit 块来阻止除 GET 或 POST 之外的访问。这是我的工作 .htaccess 文件。

AuthType Basic
AuthName "Restricted Access"
AuthUserFile /etc/wordpress/htpasswd
Require Valid-User
<LimitExcept GET POST>
    Order allow,deny
    Deny from all
</LimitExcept>

确保 .ht* 文件可被 Web 服务器读取。我通过将文件中的用户 ID 更改htpasswd为我未使用过的用户 ID 来测试未经授权的访问。

答案2

老问题了,但是...

RewriteRule ^(admin|index\.php)$ - [L]

此指令仅“忽略”URL /admin(无尾部斜杠)。因此,它不会排除对/admin子目录内文件的请求,甚至不会排除/admin对目录本身的请求,因为 mod_dir 默认会通过 301 重定向附加斜杠,即。/admin/(在 Apache 2.2 上,mod_dir 还可能在 mod_rewrite 能够处理 URL 之前发出目录索引的内部子请求。此行为在 Apache 2.4 中相反)

然后,父级中的 mod_rewrite 指令.htaccess将通过 WordPress 重写请求。(尽管您希望对物理目录/文件的任何请求都会被忽略?)

您需要将该指令更改为如下所示的内容:

RewriteRule ^(admin|index\.php$) - [L]

即,只需将$(字符串结尾锚点) 移到括号内即可。或者,创建两个单独的指令。

或者,您可以简单地启用(或禁用)文件内的重写引擎/admin/.htaccess,以便覆盖父.htaccess文件中的 mod_rewrite 指令(WordPress 前端控制器):

RewriteEngine Off

mod_rewrite 指令默认不会被继承,因此只需在子配置中启用(或禁用)重写引擎就足以覆盖父级。

相关内容