mod_rewrite и HTTP Basic auth - PullRequest
       21

mod_rewrite и HTTP Basic auth

3 голосов
/ 15 февраля 2012

У меня установлен 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 - другое PHP-приложение, которое должно быть защищено HTTP Basic auth. Как и следовало ожидать, в каталоге forum есть файл .htaccess, который выглядит следующим образом:

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, это решает проблему, а если я удаляю основные правила аутентификации, это решает проблему. Это происходит только тогда, когда присутствуют оба: как если бы базовая аутентификация полностью нарушала условия перезаписи. Это известная вещь?

Есть предложения? Теперь это действует мне на нервы, я балуюсь этим всю ночь.

1 Ответ

2 голосов
/ 15 февраля 2012

Чтобы исключить каталог форума из правила 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]
...