Estou lutando para descobrir por que uma dessas diretivas de htaccess remove a string de consulta e a outra não.
RewriteCond %{QUERY_STRING} p=invitations
RewriteRule ^index.php$ /Invitations? [L,R=301,QSD]
RewriteCond %{QUERY_STRING} p=corporate_invitations
RewriteRule ^index.php$ /Invitations/Corporate? [L,R=301,QSD]
O primeiro redirecionará de um URL como /index.php?l=page_view&p=invitations e reescreverá corretamente para / Convites .
O segundo, se você navegar para /index.php?l=page_view&p=corporate_invitations , será redirecionado para / Invitations / Corporate? l = page_view & p = corporate_invitations Então, minha pergunta é por que a primeira remove a string de consulta e a segunda não.
- Editar -
Desde que eu estou no Apache 2.4.12 eu removi o? no final, já que o QSD está funcionando corretamente para as outras linhas. Eu adicionei mais regras e o único que não consegue remover a string de consulta é o Invitations / Corporate. Ele redireciona, mas deixa a string de consulta no lugar. Eu pensei que poderia ser o / no meio da regra, mas Convites / Festa está funcionando corretamente.
O arquivo inteiro .htaccess é:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{QUERY_STRING} p=corporate_invitations
RewriteRule ^index.php$ /Invitations/Corporate [L,R=301,QSD]
RewriteCond %{QUERY_STRING} p=invitations
RewriteRule ^index.php$ /Invitations [L,R=301,QSD]
RewriteCond %{QUERY_STRING} p=message_in_a_bottle_gifts
RewriteRule ^index.php$ /GiftBottles [L,R=301,QSD]
RewriteCond %{QUERY_STRING} p=party_invitations
RewriteRule ^index.php$ /Invitations/Party [L,R=301,QSD]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php%{REQUEST_URI}