.htaccess重写但排除受密码保护的目录导致404错误

时间:2013-07-23 18:14:42

标签: apache .htaccess mod-rewrite .htpasswd

我有一个漂亮的URL设置.htaccess将不存在的URL(严格来说不是404错误)重写为提供内容或404消息的PHP脚本。我已从此重写中排除了现有文件和目录,因此CSS,图像等不会受到影响。

但是,有一个受.htpasswd密码保护的目录也应该绕过重写规则,但是在为它启用.htpasswd时则不行。

父目录.htaccess:

RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /callbacks.php [L]

有一个包含以下内容的子目录.htaccess:

RewriteEngine on

Options All -Indexes

AuthName "Backstage Access" 
AuthType Basic 
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null 
require valid-user

如果我删除require valid-user行,父目录的重写规则会根据需要忽略子目录,我可以从浏览器访问它。但是当我打开授权时,父目录的.htaccess会将子目录重写为/callbacks.php,从而导致自定义404错误。

有关如何解决此问题的任何想法?显然我不能删除密码保护的需要。我尝试删除父重写规则,而只是使用/callbacks.php作为404错误文档,但不传输POST和GET数据。

1 个答案:

答案 0 :(得分:0)

我不确定它是否仍然存在,但我遇到了同样的问题并找到了解决办法 - 将以下几行添加到您的htaccess中:

{{1}}

这应该足以绕过重写者