我整天都在搜索我遇到的问题的解决方案,并找到了许多建议的解决方案,尽管它们都没有奏效。我有url重写设置,一切正常,除了一个文件夹。如果存在文件夹或文件,则不重写它,否则将其发送到index.php进行处理。提供问题的一个子文件夹受密码保护。密码保护文件夹被重写到index.php中,就像子文件夹无效一样。其他子文件夹工作正常,并且没有.htaccess。文件夹结构和.htaccess下面。
包含相关文件的文件夹结构
的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重写并对文件夹进行身份验证,那么重新启用重写一切都按预期工作。似乎只有在您尚未通过身份验证时才会发生。
答案 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]
在尝试更新规则之前,还要清除浏览器缓存。