密码保护WordPress的wp-admin当网站不在根目录



以下是我的问题的简要简介:我为一个不在根目录中的网站的WordPress wp admin目录添加了密码保护,但现在整个网站都要求用户名和密码验证,而不仅仅是wp admin directory/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语句中的附加目录级别之外,这与我添加到站点的内容几乎相同。例如,我将以下内容添加到站点-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页面,现在站点1上的每个页面都要求进行身份验证。页面显示为OK,但弹出窗口会询问用户名和密码。如果我点击取消,对话框将关闭,我可以像往常一样看到页面;当我刷新页面或转到另一个页面时,系统会再次要求我进行身份验证。另一方面,如果我点击OK,则身份验证对话框不会重新出现;但我无法再访问wp管理目录或wp登录页面(我收到一条"页面重定向不正确"的消息)。

我怀疑某个地方有一个重写规则导致了这种情况的发生,但我不知道它是什么。以下是从我的网站根目录的完整.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>

这是整个.htaccess从site-1的根目录:

# 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-管理员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

相关内容

最新更新