mod_rewrite和HTTP Basic身份验证

时间:2012-02-14 21:55:34

标签: apache wordpress mod-rewrite basic-authentication

我已经在我的Web服务器的根目录中安装了WordPress,并将以下重写规则放入根目录.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

在子目录forum中是另一个需要受HTTP Basic身份验证保护的PHP应用程序。正如您所期望的那样,.htaccess目录中有一个forum文件,如下所示:

AuthType Basic
AuthName MembersArea
AuthUserFile /home/user/public_html/needsecure/.cnk-htpasswd_db/.1_htpasswd
require valid-user

现在,根据我的意思,根RewriteCond文件中的.htaccess语句应确保如果用户直接访问子目录,则不应进行重写。对于物理文件和名为index.php的文件也是如此。然而,当访问/forum/forum/甚至/forum/index.php时,WordPress 404页面会显示。

我尝试将重写规则中的forum目录与

一起排除
    RewriteCond %{REQUEST_URI} ^forum/

在最终重写规则之前,哪个不起作用。我也试过

    RewriteRule ^forum(.*)$ - [L]

高于所有其他规则,这也不起作用。我甚至在RewriteEngine Off中尝试了forum/.htaccess,但是没有用。

如果我删除WordPress重写规则它修复了问题,如果我删除基本身份验证规则它修复了问题。只有当两者都存在时才会出错:就像基本的auth完全打破了重写条件一样。这是一个众所周知的事情吗?

有什么建议吗?现在这让我感到紧张,我整夜都在搞乱它。

1 个答案:

答案 0 :(得分:2)

要从wordpress规则中排除论坛目录,请添加以下条件

#if its not the forum directory
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ /forum/  [NC]  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]