.Htaccess重写和密码保护文件夹问题

时间:2015-02-19 23:37:34

标签: php apache .htaccess url-rewriting

我整天都在搜索我遇到的问题的解决方案,并找到了许多建议的解决方案,尽管它们都没有奏效。我有url重写设置,一切正常,除了一个文件夹。如果存在文件夹或文件,则不重写它,否则将其发送到index.php进行处理。提供问题的一个子文件夹受密码保护。密码保护文件夹被重写到index.php中,就像子文件夹无效一样。其他子文件夹工作正常,并且没有.htaccess。文件夹结构和.htaccess下面。

包含相关文件的文件夹结构

  • 的public_html(根)
    • 字体
    • 图像
    • JS​​
    • CSS
    • 电子邮件
      • 的.htaccess
      • 的index.php
    • 的.htaccess
    • 的index.php

的public_html / htaccess的

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L]

的public_html /电子邮件/ htaccess的

AuthType Basic
AuthName "email"
AuthUserFile "/home/site/.htpasswds/public_html/email/passwd"
require valid-user

我试图关闭电子邮件文件夹中的重写,以防止在此解决方案中传播的重写表单没有明显效果。

## turn off rewrite engine
RewriteEngine off

AuthType Basic
AuthName "email"
AuthUserFile "/home/site/.htpasswds/public_html/email/passwd"
require valid-user

我也尝试过滤掉根.htaccess中的文件夹,这个文件夹似乎也被忽略了,没有明显区别。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^email
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

非常感谢任何帮助!

2015年2月23日更新:上午11:20(est)

我注意到,如果我禁用url重写并对文件夹进行身份验证,那么重新启用重写一切都按预期工作。似乎只有在您尚未通过身份验证时才会发生。

2 个答案:

答案 0 :(得分:2)

放弃了这一段时间后,我今天回顾了这个并找到了解决方案。发表于下方。 apache将401错误解释为404错误并传递给重写。解决方案是在RewriteEngine打开之前添加ErrorDocument 401默认值。这似乎是多余的,告诉它明确使用默认错误消息,但它确实解决了错误。

ErrorDocument 401 default
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^email [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

答案 1 :(得分:1)

您过滤掉的电子邮件文件夹无效,因为您的条件未匹配。你几乎拥有它。 REQUEST_URI也与前置/匹配,因为您在email之前没有匹配它。在条件中使用REQUEST_URI时必须包含它。这是一个真正的文件夹,所以你不应该需要它,但尝试这种方式。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/email [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

在尝试更新规则之前,还要清除浏览器缓存。