2013-03-07 17 views
9

Provo a eseguire un reindirizzamento 301 con .htaccess.Usa RewriteCond% {QUERY_STRING} senza associare la stringa di query al nuovo indirizzo

Il problema:

/?view=products&id=12345 -> /8831 

non v'è alcuna relazione tra il vecchio e il nuovo indirizzo.

Per qualche ragione

Redirect 301 /?view=products&id=12345 /8831 

non funziona. Se rimuovo il punto interrogativo, funziona senza il punto interrogativo.

ho provato anche:

RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831 [L,R=301] 

ma mi reindirizza a /8831?view=products&id=12345, che non è buono per me. Non ho bisogno la stringa di query nella nuova url-

risposta

18
RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831? [L,R=301] 

La desinenza ? impedirà i parametri di query originali di essere aggiunto, a meno che anche dare di nuovo la bandiera [QSA].

Da the manual:

Nota: Query String il motivo non sarà abbinato contro la stringa di query. Invece, devi utilizzare un RewriteCond con la variabile% {QUERY_STRING}. Tuttavia, è possibile creare URL nella stringa di sostituzione, contenente una parte stringa di query. Basta usare un punto interrogativo all'interno della stringa di sostituzione, per indicare che il seguente testo deve essere reiniettato nella stringa di query. Quando si desidera cancellare una stringa di query esistente, terminare la stringa di sostituzione con solo un punto interrogativo. Per combinare una nuova stringa di query con una vecchia stringa, utilizzare il flag [QSA].

Problemi correlati