问题描述
我的问题:
我的网站包括根文件夹中的一些文件以及htaccess中设置的受密码保护的子文件夹。当我尝试访问子文件夹时,它会提示我输入密码。但是,它会提示我两次输入密码,并在两次输入正确的密码后提示404错误。如果我输入了错误的密码,它将继续要求输入密码。
输入密码后,我实际上已经登录,因为如果我尝试访问该子文件夹的特定部分(即myurl.com/subfolder/index.PHP),则可以访问它。但是显然,该网站不应该首先引发404错误。
我尝试过的事情:
我已经看到其他人也有类似的问题,regarding password-protected sub-folders and 404 errors。但是,我的问题略有不同,因为我实际上要输入密码。因此,添加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"
这是子文件夹的处理方式:
#Password for subfolder
AuthType Basic
AuthName "Password Protected Area"
AuthUserFile myurl/mysubfolder/.htpasswd
Require valid-user
非常感谢您的帮助!
解决方法
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
文件中,禁用重写引擎,因此不会处理父.htaccess
文件中的mod_rewrite伪指令。尽管这可能不是理想的。RewriteEngine Off