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 ?!)