这是我的问题的简要概要:我向一个不在根目录中的网站的 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/