Por que uma dessas diretivas de htaccess remove a string de consulta e a outra não?

1

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}
    
por Nate Bunney 06.01.2016 / 03:34

0 respostas