我目前在尝试对运行 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 指令默认不会被继承,因此只需在子配置中启用(或禁用)重写引擎就足以覆盖父级。