Desativar mod_rewrite para o subdiretório

3

Estou executando um CMS usando mod_rewrite para URLs bonitas, mas tenho outro site em execução em um subdiretório no CMS que requer a reconfiguração de URL desativada, então adicionei algumas linhas no arquivo .htaccess :

Options -MultiViews
Options +ExecCGI

AddHandler php5-cgi .php
Action php-cgi /cgi-bin/php-wrapper.cgi
Action php5-cgi /cgi-bin/php-wrapper.cgi

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Added following two lines
RewriteCond %{REQUEST_URI} ^/dir/
RewriteRule ^(.+) - [PT,L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d     
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Isso funciona, NO ENTANTO, um dos diretórios em /dir/ está protegido usando mod_auth e ainda está sendo reescrito. Se eu retirar a diretiva Require valid-user no arquivo .htaccess deste diretório, tudo funcionará muito bem.

Aqui está o arquivo .htaccess do diretório protegido:

RewriteEngine off

AuthType Basic
AuthName "Administration"
AuthUserFile "/home/user/admin/.htpasswd"
require valid-user

Qualquer ajuda seria apreciada. Isso tem me incomodado por semanas! Eu fiz alguns Googling e outros tiveram esse problema, mas eu não encontrei uma solução.

    
por Michael Mior 18.08.2009 / 04:24

3 respostas

9
Eu tive o mesmo problema, Michael, e finalmente encontrei -authentication "> a solução

For basic authentication, the server writes a "401 Unauthorized" header and then looks for an error document based on a pre-defined path. Most of the time, the error document won't exist in the directory that you want to protect, so the request gets handled by the rewrite engine which throws a 404 error.

The solution to this problem is pretty straightforward. You need to add a single line of code to your .htaccess file instructing Apache to ignore the error document. When you're done, the code should look something like this:

ErrorDocument 401 "Unauthorized Access"

RewriteEngine off

AuthType Basic
AuthName "Administration"
AuthUserFile "/home/user/admin/.htpasswd"
require valid-user

Espero que funcione para você!

    
por 10.09.2009 / 14:04
1

Eu tentaria incluir as declarações Rewrite em uma tag < DirectoryMatch > declaração seguinte. Você poderia simplesmente usá-lo com lógica inversa para corresponder a todos os diretórios, exceto o que não deveria ser reescrito:

<DirectoryMatch "^/(?!dir)">
    RewriteEngine on
    ...
</DirectoryMatch>
    
por 18.08.2009 / 08:15
1

Como alternativa a Manni:

RewriteCond %{REQUEST_URI} !^/dir/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d     
RewriteRule ^(.*)$ index.php/$1 [L]

e abandone as duas regras que você adicionou (assumindo que entendi o problema corretamente), e remova o RewriteEngine do protegido .htaccess.

    
por 18.08.2009 / 10:10