Depuração da regra de reescrita do htaccess; 2º grupo de captura ($ 2) vazio

1

Eu vi esse problema aparecer para outras pessoas, mas, nos casos deles, havia um problema com o regex deles. Uma rápida visita a regexpal.com indicou-me que não era esse o caso. Eu tenho um arquivo de htaccess simples que me permite escrever URLs como ".htm" ou ".html", em vez de ".php". Eu descobri recentemente este script tem problemas quando se trata de seqüências de caracteres de consulta (? Argumento = valor). Aqui está o meu código completo .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html?\??(.*)$ $1.php?$2 [nc]

Quando imprimo a string de consulta da minha solicitação, ela sempre fica vazia e, é claro, uma verificação para array_key_exists não encontra o ID que estou tentando especificar. Eu não trabalho muito com o Apache, mas eu estava pensando que isso seria bem simples.

Se for importante, esse htaccess é aplicado sobre uma configuração relativamente simples do XAMPP. Eu não acho que fiz nada no arquivo httpd.conf. Eu posso tentar fornecer qualquer outra informação que as pessoas achem que possa ser relevante.

    
por Katana314 06.07.2013 / 03:30

1 resposta

2

Simplifique isso:

RewriteRule ^(.*)\.html?\??(.*)$ $1.php?$2 [nc]

Para isso:

RewriteRule (.*)\.html?$ $1.php [NC,QSA]

O ^ inicial é desnecessário, pois .* corresponde a qualquer coisa já. E preservar a string de consulta manualmente é (a) problemático e (b) completamente desnecessário, uma vez que o sinalizador QSA (acréscimo de string de consulta) lidará com tudo isso internamente.

    
por 06.07.2013 / 03:49