我在/中安装了一个wordpress,其中包含以下.htaccess文件
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我在/ photo-archive中有一个小的内部照片存档页面,该页面具有以下.htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*)$ /photo-archive/index.php?path=$1 [NC,L,QSA]
#AuthType Basic
#AuthName "Photo-Archive-Test"
#AuthUserFile "passwd"
#require valid-user
上面列出的内容有效,但是照片存档不受密码保护(因为这些行已被注释掉)。
测试:
当我取消注释这些行时,没有得到照片存档的首页和密码提示,而是得到了WordPress的404页面。
如果我注释掉wordpress的.htaccess并取消注释照片存档的.htaccess中的所有行,那么我将获得带有密码保护的照片存档页面。
如果我将照片存档的rewriteengine内容注释掉并取消对密码内容的注释,那么我仍然会获得WordPress的404页面。
因此,似乎WordPress以某种方式接受了该页面受密码保护的事实,然后应用了它的rewriteEngine代码。
知道这里发生了什么或如何解决吗?
编辑:只有一行导致该问题:要求有效用户
Edit2:在进行了一些在线研究之后,似乎正在发生的事是apache进入了照片存档页面,出现401(未经授权)错误,试图将该错误提供给浏览器,浏览器以某种方式查找了该页面,并且由于没有401页,因此WordPress可以提供其404页的内容。我不知道如何解决它,但是我认为这可能是原因。
我在Wordpress的.htaccess文件顶部添加了“ ErrorDocument 401 /401.html”。
401.html现在只是一个简单的html文件,它可以是任何东西:
<html>401 error</html>
我从这里得到了答案:http : //wordpress.org/support/topic/htaccess-and-subdirectories
.htaccess文件是可加的。每当您请求页面时,Web服务器基本上都会从根目录开始遍历树下的每个目录(由httpd.conf文件中最接近的匹配指定),并将所有.htaccess文件加在一起。当遍历它们时,它会解析每个。更高版本的.htaccess文件将覆盖以前的文件,但仅适用于相同的指定项目。RewriteRules是累积的。
因此,我认为这是受密码保护的目录中的授权正在将401响应(“需要授权”)强制返回给客户端。通常,客户端会收到401并要求输入密码。
但是,在这种情况下,此401响应会被WordPress RewriteRules拦截,该重写说是将所有内容都重写为WordPress。这是因为.htaccess是累积性的,而最接近的目录是根目录。
因此,通过在WordPress规则之前对401响应强制使用ErrorDocument,可以先占它们(由于该文件实际存在,因此RewriteRules对其无效),从而导致发送401文档而不是重写为WordPress。 。但是,客户端不会对此文档进行任何废话,而是会看到401并要求输入密码。
请注意,如果您未能三次输入密码(取决于客户端),您可能会被转发回WordPress。这可能是您想要的,也可能不是。如果添加403行,则会返回错误文档或“ 403禁止访问”页面,不确定哪个页面。
其他可能的解决方案:-在httpd.conf中添加新的Directory语句,专门指定受密码保护的目录,从而绕过htaccess搜索路径中的wordpress重写。-将另一个重写添加到wordpress重写的顶部,从而仅在该目录中抢占它们。
但是强制执行401/403文档对我来说似乎是最好的解决方案,因为它可以与您希望添加的所有受密码保护的子目录一起使用,而无需指定它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句