wordpress - 当站点不在根目录时密码保护 WordPress wp-admin

标签 wordpress .htaccess mod-rewrite directory password-protection

这是我的问题的简要概要:我向一个不在根目录中的网站的 WordPress wp-admin 目录添加了密码保护,但现在整个网站都要求用户名和 pawword 身份验证,而不仅仅是wp-admin 目录/WordPress 登录页面。我想用密码保护 WordPress wp-admin 目录和 wp-login.php 页面,但我不希望其他每个页面都提示输入用户 ID 和密码。现在一些细节(很抱歉这么长)...

我有一个共享托管帐户,我在同一帐户下托管多个 WordPress 网站。根目录(public_html)是我自己的网站,然后还有其他几个网站在各自的子目录中。最近,我为每个站点的 wp-admin 目录和 wp-login.php 文件添加了密码保护。

所以文件结构如下所示:

my-site
    site-1
        wp-admin
    site-2
        wp-admin
    wp-admin  /* this is the wp-admin directory for my site */

我将以下内容添加到我网站的 wp-admin 目录中的 .htaccess 文件中,这工作正常 - 它按预期向我网站的 wp-admin 目录添加了密码保护。

ErrorDocument 401 "Access Denied"
ErrorDocument 403 "Access Denied"
AuthName "MySiteUser"
AuthUserFile "/home/my-site/.htpasswds/public_html/wp-admin/passwd"
AuthType Basic
require valid-user

然后我将以下代码添加到站点根目录中的 .htaccess 文件中:

<FilesMatch "wp-login.php">
ErrorDocument 401 "Access Denied"
ErrorDocument 403 "Access Denied"
AuthName "MySiteUser"
AuthUserFile "/home/my-site/.htpasswds/public_html/wp-admin/passwd"
AuthType Basic
require valid-user
</FilesMatch>

这也按预期工作 - 它按预期向我网站的 wp-login.php 页面添加了密码保护。到目前为止,一切顺利。

当我向不在根目录中的其他站点添加密码保护时,问题就出现了。除了 AuthUserFile 语句中的附加目录级别之外,这与我添加到网站中的内容几乎相同。例如,我将以下内容添加到 site-1 的 wp-admin 目录中的 .htaccess 文件中:

ErrorDocument 401 "Access Denied"
ErrorDocument 403 "Access Denied"
AuthName "Site1User"
AuthUserFile "/home/my-site/.htpasswds/public_html/site1.com/wp-admin/passwd"
AuthType Basic
require valid-user

我还将包含在 FilesMatch 标记中的相同代码添加到 site-1 根目录中的 .htaccess 中。

<FilesMatch "wp-login.php">
ErrorDocument 401 "Denied"
ErrorDocument 403 "Denied"
AuthName "Site1User"
AuthUserFile "/home/my-site/.htpasswds/public_html/site1.com/wp-admin/passwd"
AuthType Basic
require valid-user
</FilesMatch>

此密码确实保护 wp-admin 目录和 wp-login.php 页面,现在 site-1 上的每个页面都要求进行身份验证。页面呈现正常,但弹出窗口要求输入用户名和密码。如果我点击取消,对话框将关闭,我可以像平常一样看到页面;当我刷新页面或转到另一个页面时,系统会再次要求我进行身份验证。另一方面,如果我点击“确定”,则身份验证对话框不会再次出现;但随后我无法再访问 wp-admin 目录或 wp-login 页面(我收到“页面未正确重定向”消息)。

我怀疑某个地方有重写规则导致这种情况发生,但我不知道它是什么。这是我网站根目录下的整个 .htaccess:

ErrorDocument 401 "Access Denied"
ErrorDocument 403 "Access Denied"
# BEGIN W3TC Browser Cache
<IfModule mod_deflate.c>
    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
    </IfModule>
        AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json
    <IfModule mod_mime.c>
        # DEFLATE by extension
        AddOutputFilter DEFLATE js css htm html xml
    </IfModule>
</IfModule>
# END W3TC Browser Cache
# BEGIN W3TC Page Cache core
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteRule .* - [E=W3TC_ENC:_gzip]
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{REQUEST_URI} \/$
    RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle) [NC]
    RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index.html%{ENV:W3TC_ENC}" -f
    RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index.html%{ENV:W3TC_ENC}" [L]
</IfModule>
# END W3TC Page Cache core
# 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>
# END WordPress
<FilesMatch "wp-login.php">
ErrorDocument 401 "Access Denied"
ErrorDocument 403 "Access Denied"
AuthName "MySiteUser"
AuthUserFile "/home/my-site/.htpasswds/public_html/wp-admin/passwd"
AuthType Basic
require valid-user
</FilesMatch>

这是 site-1 根目录中的整个 .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>
# END WordPress
ErrorDocument 401 "Denied"
ErrorDocument 403 "Denied"
<FilesMatch "wp-login.php">
ErrorDocument 401 "Access Denied"
ErrorDocument 403 "Access Denied"
AuthName "Site1User"
AuthUserFile "/home/my-site/.htpasswds/public_html/site1.com/wp-admin/passwd"
AuthType Basic
require valid-user
</FilesMatch>

我已经更改了上面代码中的站点名称,并且我没有在 .htaccess 文件中包含所有规则,但我已经删除了其他内容而没有解决问题,所以我很确定我已经给了你所有相关的信息。如果您需要,我可以私下向您发送实际文件和实际链接。

最佳答案

即使将站点移至 root 后,未访问 wp-admin 时获取密码提示的问题仍然存在!因此,问题是因为它位于托管域上。

在更新的 InMotionHosting 页面上找到解决方案: http://www.inmotionhosting.com/support/website/wordpress/prevent-unauthorized-wp-admin-wp-login-php-attempts#allow-admin-ajax

解决方案是将以下规则添加到位于 wp-admin 目录中的 .htaccess 文件中:

# Allow plugin access to admin-ajax.php around password protection
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

完整的 .htaccess 文件现在如下所示:

ErrorDocument 401 "Denied"
ErrorDocument 403 "Denied"

# Allow plugin access to admin-ajax.php around password protection
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

AuthName "MySiteUser"
AuthUserFile "/home/my-site/.htpasswds/public_html/wp-admin/passwd"
AuthType Basic
require valid-user

关于wordpress - 当站点不在根目录时密码保护 WordPress wp-admin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21121754/

相关文章:

.htaccess - 我可以使用 DNS 或 .htaccess 将子域重定向到其他站点吗?

apache - Htaccess 重定向 301 从 "with parameter"到 "without parameter"

Tomcat 阀门重写不起作用

.htaccess - 在 htaccess 中从 URL 中删除不需要的字符

php - 如何优化php进程内存占用?

php - 如何从它的 Slug 中获取 WooCommerce 产品 ID?

WordPress 在没有插件的情况下向页面添加自定义字段

在 .htaccess 中使用 FilesMatch 和 Headers 所需的 Apache 模块

php - SQL:根据另一个单元格的值选择单元格的值

php - 通过 .htaccess 将所有 *.php 页面重定向到 *.html