O servidor lança o erro LimitInternalRecursion ao usar o htacess

3

Sou novo em .htaccess e não entendi o suficiente para entender o que está acontecendo. O servidor diz apenas que o limite de 10 redirecionamentos internos foi excedido, embora eu não consiga ver nenhum motivo para "redirecionar". Isso só acontece quando eu tento usar /users/Username , /users/ mostra um erro que este usuário não pode ser encontrado, que é como eu queria, /users/Username gera um Erro interno do servidor 500. O documento em si é bom, a verificação do banco de dados também deve funcionar. O documento .htaccess é:

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

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

IndexIgnore * 

ErrorDocument 400     /
ErrorDocument 404     /

RewriteRule    ^users/([a-zA-Z0-9_-]+)/?$ users.php?id=$1    [NC,L]
    
por user407022 23.03.2017 / 13:40

1 resposta

1

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
:
RewriteRule    ^users/([a-zA-Z0-9_-]+)/?$ users.php?id=$1    [NC,L]

O primeiro bloco de regras está capturando uma solicitação para /users/Username . Neste caso, REQUEST_FILENAME é .../users (o primeiro segmento de caminho completo após um diretório válido) e .../users.php é de fato um arquivo válido neste caso. No entanto, você está anexando .php ao final do URL solicitado, então /users/Username se torna /users/Username.php , /users/Username.php.php , etc.

Você pode contornar esse conflito simplesmente invertendo a ordem dessas diretivas:

RewriteRule ^users/([a-zA-Z0-9_-]+)/?$ users.php?id=$1    [L]

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

Agora, uma solicitação para /users/Username será capturada pela primeira regra e roteada corretamente para user.php?id=Username , que não corresponderá ao segundo bloco de regras.

(Eu removi o NC flag já que você está verificando o a-zA-Z no padrão . A menos que /users possa ser /uSeRs também ?!)

    
por 23.03.2017 / 16:17