首页 > 解决方案 > 受密码保护的子文件夹两次提示密码然后抛出 404 错误

问题描述

我的问题:

我的网站包含根文件夹中的一些文件,以及在我的 htaccess 中设置的受密码保护的子文件夹。当我尝试访问子文件夹时,它会提示我输入密码,这是应该的。但是,它提示我输入两次密码,两次输入正确密码后,它会抛出 404 错误。如果我输入了错误的密码,它会一直要求输入密码。

输入密码后,我实际上已登录,因为如果我尝试访问该子文件夹的特定部分(即 myurl.com/subfolder/index.php),我可以访问它。但显然该网站不应该首先抛出 404 错误。

我试过的:

我看到其他人也有类似的问题,关于受密码保护的子文件夹和 404 错误。但是,我的问题略有不同,因为我实际上要输入密码。因此,添加的常见解决方案ErrorDocument 401 "Authorisation Required"并没有解决问题。

代码:

这是根文件夹的 htaccess:

#Redirects to the https version of site
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

## Removes php extensions 
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

#Allow password for subfolder
ErrorDocument 401 "Authorisation Required"

这是子文件夹的 htacess:

#Password for subfolder
AuthType Basic
AuthName "Password Protected Area"
AuthUserFile myurl/mysubfolder/.htpasswd
Require valid-user

任何帮助深表感谢!

标签: php.htaccess.htpasswd

解决方案


RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

如果您请求/subfolder 目录(并且一旦您通过身份验证),上述 mod_rewrite 指令(在根.htaccess文件中)将附加一个.php扩展名,即。/subfolder/.php并导致 404。

(不知道为什么会提示您两次输入密码,除非这也与上述重写有关,或者可能与触发 404 的方式有关 - 您是否定义了自定义 404 文档?您还有其他.htaccess指令吗? )

您需要:

  • 在上述规则中包含一个附加条件以排除目录。例如:

    RewriteCond %{REQUEST_FILENAME} !-d
    
  • 或者,在文件中,禁用重写引擎,因此不处理/subfolder/.htaccess父文件中的 mod_rewrite 指令。.htaccess尽管这可能是不可取的。

    RewriteEngine Off
    

推荐阅读